لماذا جافا وليس بايثون؟ (إفساد: الاختيار ليس واضحًا)
\nعندما يتعلق الأمر بتحليل واستخراج البيانات، غالبًا ما يتبادر إلى الذهن بايثون مع مكتبات BeautifulSoup و Scrapy. لكن لنكن صادقين: في عالم تطوير المؤسسات والأنظمة عالية التحميل والخدمات المصغرة، تظل جافا هي الملك. إذا كنت تكتب بالفعل بلغة جافا أو تتطلع فقط إلى هذه اللغة، فإن التحليل بها ليس مجرد "ممكن"، بل غالبًا ما يكون ضروريًا: سرعة عالية، تعدد خيوط مدمج، أدوات قوية للعمل مع HTTP و HTML.
\nفي هذه المقالة، سنشرح كيفية تحليل المواقع بلغة جافا من الصفر. ستتعرف على المكتبات التي يجب استخدامها، وكيفية تجنب الحظر، وكيفية بناء أول محلل عملي لك. ستكون أمثلة الكود حية قدر الإمكان - خذها وشغّلها.
\n\nما هو تحليل واستخراج البيانات (ولماذا تحتاجه)
\nقبل الغوص في الكود، دعنا نوضح المصطلحات. التحليل هو تفكيك البنية (HTML، JSON، XML) واستخراج المعلومات المطلوبة. الاستخراج هو عملية جمع البيانات من صفحات الويب، والتي تشمل التحليل وتحميل الصفحات وتصفح الروابط.
\nلماذا تحتاج هذا؟ أمثلة من الحياة الواقعية:
\n- \n
- مراقبة أسعار المنافسين (جمع البيانات من المتاجر الإلكترونية). \n
- جمع جهات الاتصال وعناوين البريد الإلكتروني لتوليد العملاء المحتملين B2B. \n
- أتمتة جمع الأخبار أو المنشورات من وسائل التواصل الاجتماعي. \n
- تحليل التقييمات وتصنيفات المنتجات. \n
بلغة جافا، يتم كل هذا بسرعة وثبات وبأقل استهلاك للذاكرة.
\n\nأدوات جافا للتحليل: اختيار المكتبات
\nلتحليل واستخراج البيانات بلغة جافا، هناك عدة مكتبات قوية. إليك المجموعة الأساسية التي ستغطي 95% من المهام:
\n- \n
- Jsoup - المكتبة الرئيسية لتحليل HTML. يمكنها زيارة المواقع، واستخراج العناصر باستخدام محددات CSS، والعمل مع السمات والنص. \n
- Apache HttpClient أو Java 11+ HttpClient - لضبط الطلبات بدقة، والعمل مع الكوكيز والجلسات والرؤوس. \n
- Selenium WebDriver - إذا كان الموقع يستخدم JavaScript لتحميل البيانات. يعرض الصفحة كمتصفح حقيقي (Chrome، Firefox). \n
- OkHttp - بديل خفيف وسريع لـ HttpClient. \n
معظم المواقع الثابتة، يكفي Jsoup + HttpClient المدمج. للمواقع الديناميكية، نضيف Selenium.
\n\nكتابة أول محلل بلغة جافا باستخدام Jsoup
\nلنبدأ بشيء بسيط: تحليل عناوين المقالات من مدونة. لنفترض أننا بحاجة لجمع كل العناوين من الصفحة الرئيسية لـ pythonlib.ru (افتراضيًا).
\nسنضيف التبعية في Maven (pom.xml):
\n<dependency>\n <groupId>org.jsoup</groupId>\n <artifactId>jsoup</artifactId>\n <version>1.17.2</version>\n</dependency>\n\nالآن الكود نفسه:
\nimport org.jsoup.Jsoup;\nimport org.jsoup.nodes.Document;\nimport org.jsoup.nodes.Element;\nimport org.jsoup.select.Elements;\n\npublic class SimpleParser {\n public static void main(String[] args) {\n try {\n // 1. تحميل الصفحة\n Document doc = Jsoup.connect("https://pythonlib.ru")\n .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")\n .timeout(10000)\n .get();\n\n // 2. اختيار جميع العناوين h2 (أو أي محدد آخر)\n Elements headlines = doc.select("h2.entry-title a");\n\n // 3. عرض النص والروابط\n for (Element headline : headlines) {\n String title = headline.text();\n String link = headline.attr("href");\n System.out.println("العنوان: " + title);\n System.out.println("الرابط: " + link);\n System.out.println("---");\n }\n\n } catch (Exception e) {\n e.printStac