تحليل واستخراج البيانات بلغة Kotlin: لماذا يستحق اهتمامك
\n\nعندما يتعلق الأمر بجمع البيانات من الإنترنت، غالبًا ما يتبادر إلى الذهن Python مع مكتبات BeautifulSoup وScrapy. ولكن ماذا لو كانت مجموعتك التقنية هي JVM، وقلبك يميل إلى الكود المختصر والآمن؟ تعرف على: Kotlin. هذه اللغة ليست مجرد "Java أخرى"، بل هي أداة قوية لـ تحليل واستخراج البيانات تتيح لك كتابة كود نظيف وفعال وغير متزامن دون ضوضاء زائدة.
\n\nفي هذه المقالة، سنشرح كيفية تحويل Kotlin إلى آلة حقيقية لجمع المعلومات. ستتعرف على المكتبات التي يجب استخدامها، وكيفية تجنب الحظر من الموقع، وكيفية معالجة آلاف الصفحات دون صداع. هيا بنا!
\n\nما هو تحليل واستخراج البيانات بلغة Kotlin
\n\nقبل الغوص في الكود، دعنا نضع النقاط على الحروف.
\n- \n
- استخراج الويب (scraping) — هو استخراج كميات كبيرة من البيانات من صفحات الويب. تقوم بتحميل HTML، وتحليله، واستخراج الأجزاء المطلوبة: الأسعار، العناوين، أوصاف المنتجات. \n
- التحليل (parsing) — مفهوم أضيق. هو تحليل بنية البيانات (HTML، JSON، XML) إلى شكل مناسب للبرنامج. التحليل هو جزء من الاستخراج. \n
في Kotlin، يتم تنفيذ تحليل واستخراج البيانات بأناقة بفضل الإمكانيات الوظيفية، والكتابة الصارمة، والدعم الممتاز لـ coroutines. تحصل على كود يسهل قراءته واختباره وصيانته.
\n\nمكتبات تحليل واستخراج البيانات بلغة Kotlin
\n\nاختيار المكتبة هو 50% من النجاح. إليك المجموعة الأساسية لـ Kotlin:
\n\n- \n
- Jsoup — المعيار الذهبي لتحليل HTML. يعمل على JVM ويفهم حتى التنسيقات المعقدة. \n
- Ktor Client — عميل HTTP غير متزامن من JetBrains. مثالي للتكامل مع coroutines. \n
- kotlinx.serialization — تسلسل JSON بدون ألم. \n
- OkHttp — إذا كنت بحاجة إلى تحكم أكثر تفصيلاً في الطلبات. \n
- HtmlUnit — للمواقع التي تعرض المحتوى عبر JavaScript (نادرًا، لكنه يحدث). \n
في هذه المقالة، سنركز على مجموعة Ktor + Jsoup + kotlinx.serialization — فهي توفر أقصى قدر من التحكم والسرعة.
\n\nمثال عملي: تحليل البيانات من موقع باستخدام Kotlin
\n\nأفضل طريقة لفهم استخراج البيانات بلغة Kotlin هي كتابة سكريبت حقيقي. لنفترض أننا نجمع معلومات عن الكتب من موقع تجميعي (مثل موقع هابر أو متجر كتب). هدفنا: الحصول على اسم الكتاب، المؤلف، وسعر كل كتاب.
\n\nالخطوة 1. إعداد المشروع
\n\nأنشئ مشروع Gradle جديد وأضف التبعيات في ملف build.gradle.kts:
dependencies {\n implementation("io.ktor:ktor-client-core:2.3.7")\n implementation("io.ktor:ktor-client-cio:2.3.7")\n implementation("org.jsoup:jsoup:1.17.2")\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")\n implementation("ch.qos.logback:logback-classic:1.4.14")\n}\n\nالخطوة 2. كتابة عميل HTTP لتحميل الصفحات
\n\nنستخدم Ktor Client للتحميل غير المتزامن. تسمح coroutines بذلك دون حظر الخيط.
\n\nimport io.ktor.client.*\nimport io.ktor.client.request.*\nimport io.ktor.client.statement.*\nimport kotlinx.coroutines.runBlocking\n\nclass PageLoader(private val client: HttpClient) {\n\n suspend fun loadPage(url: String): String {\n val response: HttpResponse = client.get(url)\n return response.bodyAsText()\n }\n}\n\nfun main() = runBlocking {\n val client = HttpClient {\n // يمكن ضبط المهلات ووكلاء المستخدم إلخ.\n }\n val loader = PageLoader(client)\n val html = loader.loadPage("https://example-books.com/catalog")\n println(html.take(500)) // نطبع أول 500 حرف للتحقق\n client.close()\n}\n\n