استخدام جافا لجمع البيانات والحصاد على الويب

image

محتويات المقال

  1. الأطر المتاحة للعمل مع بروكسيات مستهدفة جغرافياً
  2. متطلبات الدليل لمن يشترون عناوين IP سكنية
  3. أساسيات محددات CSS من مزود بروكسيات مستهدفة جغرافياً
  4. دليل خطوة بخطوة من موقع بروكسي موثوق
  5. الاستعلام
  6. الخاتمة

من خلال التعاون مع المستخدمين الذين يحتاجون إلى أدوات لجمع البيانات والحصاد وتشغيل نظام بيئي من بروكسيات مستهدفة جغرافياً، تعرف Dexodata، موقع بروكسي موثوق وفعال من حيث التكلفة، أن جافا ليست الخيار الوحيد لجمع المعلومات. عندما نوفر تجربة مجانية للبروكسي أو نقدم شراء عناوين IP سكنية بسعر رائع، يتم استخدام PHP وNode.js وC# وPython، إلخ، بشكل روتيني أيضاً. ومع ذلك، لا تزال جافا هي الطريقة المفضلة للعديدين. اليوم، سنستكشف إمكانياتها. 

الأطر المتاحة للعمل مع بروكسيات مستهدفة جغرافياً

عند جمع البيانات من الويب باستخدام جافا، يتم استخدام مجموعة من المكتبات غالباً: من جهة، هناك JSoup، ومن جهة أخرى، هناك HtmlUnit.

بالنسبة لـ JSoup، فهو مكتبة قوية وفعالة وسهلة الاستخدام نسبياً قادرة على التعامل بنجاح مع مستندات HTML غير الصحيحة. في الواقع، هذا هو بالضبط السبب في تسميته “JSoup”، حيث تعني “شوربة العلامات” أشياء مشوهة. لأغراض جميع النوايا، يعد JSoup على الأرجح المكتبة الأكثر طلباً وانتشاراً لجافا من حيث جمع المعلومات.

أما بالنسبة لـ HtmlUnit، فيمكن وصفه بأنه متصفح بدون واجهة مستخدم (أي متصفح ليس له واجهة رسومية) للأدوات المدعومة بجافا. إنه قادر على تقليد الجوانب النموذجية لحلول التصفح، بما في ذلك التقاط مكونات الصفحة معينة، والنقر على نقاط مختلفة، إلخ. كما يوحي اسمه، يتم استخدامه عادةً لتنفيذ جولات من اختبارات الوحدة. حرفياً، هذه هي طريقة لمحاكاة حل تصفح في سيناريو اختبار.

بالإضافة إلى ذلك، يعد HtmlUnit خياراً مناسباً في سياق جمع البيانات من الويب. الميزة الرئيسية هي أن الناس يحتاجون فقط إلى سطر من الكود لتعطيل كل من JS وCSS. بلا شك، هذه ميزة مفيدة، حيث أن JS وCSS غالباً ما تكون غير ذات صلة في حالات الحصاد. أدناه، نقيم كلاهما ونقوم بتصميم أدوات جمع البيانات.

استخدام جافا لجمع البيانات من الويب باستخدام بروكسيات مستهدفة جغرافياً

كموقع بروكسي موثوق مع مجموعة عالمية من بروكسيات مستهدفة جغرافياً ومزايا أخرى هامة، نقوم بانتظام بإدراج عدة تقنيات تمكن الفرق من قراءة وتعديل صفحة محملة. عندما نتحدث عن فرصة طلب تجربة مجانية للبروكسي أو شراء عناوين IP سكنية، نؤكد غالباً على الميزة الحاسمة لـ HtmlUnit: إنه يبسط التفاعلات مع الصفحات. في هذا السياق، يشبه المتصفح (ليس مفاجئاً على الإطلاق، لأنه يعمل كمتصفح بدون واجهة مستخدم). هذه الحقيقة تعني قدرات مثل القراءة، وملء النماذج، والنقر، وما إلى ذلك. في سيناريوهاتنا، تستخدم Dexodata إمكانيات هذه المكتبة لقراءة المعلومات من عناوين URL. تابعونا لمعرفة المزيد.

 

متطلبات الدليل لمن يشترون عناوين IP سكنية

 

يتوقع هذا العرض أن يتقن القراء جافا إلى حد ما. يتم استخدام Maven هنا لإدارة الحزم في سيناريوهاتنا. بالإضافة إلى أساسيات جافا، يجب أن يعرف القراء كيف تعمل الصفحات على الويب. لذا، فإن الإلمام بـ HTML أمر إلزامي. أيضاً، يمكن اعتبار القدرة على اختيار العناصر، من خلال XPath أو محددات CSS، أمراً حيوياً. يرجى تذكر: ليست كل مكتبة موجودة متوافقة عندما يتعلق الأمر بـ XPath. مؤسف ولكنه صحيح.

 

أساسيات محددات CSS من مزود بروكسيات مستهدفة جغرافياً

 

قم بعمل توقف لتجديد ذاكرتك بشأن جوهر محددات CSS. تشمل:

  • #firstname – يختار كل عنصر يتطابق معرفه مع “firstname”.
  • .blue – يختار كل مكون كلما كانت فئته تحتوي على “blue”.
  • p – يختار كل علامة <p>.
  • div#firstname – مسؤول عن اختيار عناصر div التي يتطابق معرفها مع “firstname”.
  • p.link.new – انتبه لعدم وجود فراغ. يختار <p class="link new">.
  • p.link .new – يختار كل مكون مرتبط بفئة “new”، التي يمكن العثور عليها داخل <p class="link">.

 

دليل خطوة بخطوة من موقع بروكسي موثوق

 

Dexodata، استناداً إلى الخبرة التقنية الواسعة التي اكتسبتها كموقع بروكسي موثوق، على وشك تصميم حل تحليل جافا بوسائل فعالة من مكتبة Maven بالتعاون مع JSoup وHtmlUnit. في الواقع، ستسمح لنا هذه المكتبات بسهولة تحليل والتلاعب بمحتوى HTML داخل تطبيق جافا.

اتبع التعليمات خطوة بخطوة المقدمة أدناه لإعداد مشروعك لاستخدامه مع بروكسيات مستهدفة جغرافياً. بالمناسبة، دعنا نذكرك أنه مع Dexodata، يمكن للناس ليس فقط شراء عناوين IP سكنية، ولكن أيضاً يمكن للمستخدمين الجدد الحصول على تجربة مجانية للبروكسي. لنبدأ.

1. المرحلة الأولية هي الحصول على مكتبة.

Maven قادر على المساعدة. استخدم ببساطة بيئة جافا المتاحة. هناك، قم بإنشاء مشروع Maven. إذا كان Maven غير ذي صلة لسبب ما، قم بزيارة هذا الفضاء الإلكتروني. هناك، يمكن للمرء اختيار تنزيلات بديلة. 

حسناً، قم بإنجاز الأمور مع تثبيت Maven وإنشاء مشروع جديد. إليك دليل التثبيت للاستكشاف.

بمجرد التثبيت، قم بإنشاء مشروع Maven جديد عن طريق تنفيذ هذا الأمر في الطرفية:

mvn archetype:generate -DgroupId=com.mycompany.parser -DartifactId=java-parser -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

من خلال القيام بذلك عبر هذا الأمر، سيتم إنشاء مجلد مشروع جديد يسمى 'java-parser.' هذا يوفر لنا جميع ملفات Maven الضرورية مع هيكل أساسي. لقد تم اتخاذ الخطوة الأولية والمهمة.

2. الآن، يجب إضافة التبعيات إلى ملف pom.xml. 

ليس بالأمر الكبير على الإطلاق. في ملف pom.xml (الذي يمثل “نموذج كائن المشروع”) يجب إضافة قسم جديد. مهمته هي العمل مع التبعيات. بعد ذلك، يأتي الوقت لتوفير تبعية لـ JSoup.

  1. للقيام بذلك، انتقل إلى مجلد 'java-parser'.
  2. هناك، افتح ملف pom.xml.
  3. قم بإضافة هذه التبعيات داخل علامة <dependencies>، كما هو موضح أدناه:

<dependency>

    <groupId>org.jsoup</groupId>

    <artifactId>jsoup</artifactId>

    <version>1.14.3</version>

</dependency>

<dependency>

    <groupId>net.sourceforge.htmlunit</groupId>

    <artifactId>htmlunit</artifactId>

    <version>2.56.0</version>

</dependency>

احفظ ملف pom.xml. Dexodata، كمزود لبروكسيات مستهدفة جغرافياً ومرشد برمجي، لا تزال معك. 

3. أنشئ فئة جافا جديدة.

في مجلد src/main/java/com/mycompany/parser، أنشئ ملف جافا جديد يسمى 'HtmlParser.java'. سيحتوي هذا الملف على تنفيذ الفئة الرئيسية ويعمل كنقطة دخول للمحلل المستقبلي.

4. استورد المكتبات اللازمة في 'HtmlParser.java'. افتح الملف في محرر نصوص من اختيارك أو IDE. قبل أن تبدأ في كتابة أي كود، يجب استيراد المكتبات اللازمة المتعلقة بـ HtmlUnit وJSoup. أضف هذه التعليمات الاستيرادية في بداية ملف HtmlParser.java:

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import com.gargoylesoftware.htmlunit.WebClient;

import com.gargoylesoftware.htmlunit.html.HtmlPage;

لقد حققنا بالفعل تقدماً كبيراً، استمر في المضي قدماً مع موقع بروكسي موثوق.

5. قم بتهيئة كائن 'WebClient' وتعطيل JS مع CSS.

داخل فئة HtmlParser، ستقوم بتنفيذ طرق لإنشاء كائن WebClient، وجلب صفحة HTML باستخدام HtmlUnit، وتحليل محتوى HTML عبر JSoup، واستخراج بيانات معينة (مثل العنوان، والوصف، والصورة)، وطريقة رئيسية لتنفيذ هذه المهام بالتسلسل. 

public class HtmlParser {

    private static WebClient createWebClient() {

        WebClient webClient = new WebClient();

        webClient.getOptions().setJavaScriptEnabled(false);

        webClient.getOptions().setCssEnabled(false);

        return webClient;

    }

}

6. أنشئ طريقة لجلب صفحة HTML باستخدام HtmlUnit:

public static HtmlPage fetchHtmlPage(String url) {

    try (WebClient webClient = createWebClient()) {

        return webClient.getPage(url);

    } catch (Exception e) {

        e.printStackTrace();

        return null;

    }

}

7. أنشئ طريقة لتحليل محتوى HTML عبر JSoup:

public static Document parseHtmlContent(String htmlContent) {

    return Jsoup.parse(htmlContent);

}

8. استمر في العمل على HTML المحلل: 

public static void extractInformation(Document document) {

    // استخراج المعلومات من مستند HTML المحلل باستخدام طرق JSoup

    // على سبيل المثال، document.select("a[href]"), document.select("img[src$=.png]")

    // لمزيد من التفاصيل، راجع وثائق JSoup: https://jsoup.org/cookbook/

}

أنت جيد في ذلك، لا يزال هناك بعض الخطوات المتبقية. 

9. أنشئ طريقة لجلب المعلومات من HTML المحلل:

public static void main(String[] args) {

    String url = "https://www.example.com";

    HtmlPage htmlPage = fetchHtmlPage(url);

    if (htmlPage != null) {

        String htmlContent = htmlPage.asXml();

رائع! كما يدرك المرء، ليس هناك علم صاروخي في ذلك. على الأقل، عندما تعمل شركتك مع موقع بروكسي موثوق يقدم بروكسيات مستهدفة جغرافياً في جميع أنحاء العالم. نحن نعرف تجارتنا.

كانت الخطوات السابقة مخصصة لجلب محتوى HTML من صفحة ويب عبر HtmlUnit والعمل عليه وتحليله باستخدام JSoup. الآن، حان الوقت للتركيز على استخراج بيانات معينة، مثل العنوان، والوصف، والصورة من صفحة متجر عبر الإنترنت. لجعل ذلك يحدث في الواقع، نحتاج أولاً إلى تحديد علامات HTML والسمات المرتبطة بمثل هذه المكونات. يمكن للمستخدمين استخدام أدوات مطور متصفحهم لفحص و"مسح" كود HTML المصدر والعثور على المكونات ذات الصلة.

10. بمجرد تحديدك للمكونات HTML ذات الصلة، يمكنك استخدام قدرات التحديد القوية لـ JSoup لالتقاط البيانات.

على سبيل المثال، لنفترض أن العنوان داخل علامة <h1>، والوصف داخل علامة <div> بفئة "product-description"، والصورة داخل علامة <img> بفئة "product-image". يمكنك تطبيق هذا المقتطف من الكود في طريقة extractInformation() الخاصة بك للحصول على هذه البيانات:

public static void extractInformation(Document document) {

    // استخراج العنوان

    String title = document.select("h1").text();

    System.out.println("العنوان: " + title);

 

    // استخراج الوصف

    String description = document.select("div.product-description").text();

    System.out.println("الوصف: " + description);

 

    // استخراج عنوان الصورة

    String imageUrl = document.select("img.product-image").attr("src");

    System.out.println("عنوان الصورة: " + imageUrl);

}

11. إذا كانت الموقع يعتمد على JavaScript لتحميل المحتوى ديناميكياً، قد يحتاج الفريق إلى تمكين دعم JS في HtmlUnit عن طريق تغيير طريقة createWebClient():

private static WebClient createWebClient() {

    WebClient webClient = new WebClient();

    webClient.getOptions().setJavaScriptEnabled(true);

    webClient.getOptions().setCssEnabled(false);

    webClient.getOptions().setThrowExceptionOnScriptError(false);

    webClient.waitForBackgroundJavaScript(5000); // انتظر حتى ينتهي JavaScript من التحميل

    return webClient;

}

لاحظ أن تمكين JavaScript قد يزيد من فترة التحميل بالتزامن مع فرص مواجهة أخطاء أو مشاكل توافق مع نصوص الموقع. هذه المشكلة تستحق انتباهك، حيث تعرف Dexodata، كموقع بروكسي موثوق، هذه الحقيقة الصعبة.

12. بعد أن نجحت في جلب العناوين، والأوصاف، والصور من المتجر عبر الإنترنت، قد تختار تخزين هذه المعلومات لمزيد من التحليل أو المعالجة. تقنية شائعة هي حفظ المعلومات المجمعة في ملف. يمكنك اختيار تنسيقات ملفات مختلفة حسب احتياجاتك، مثل CSV أو JSON أو XML. في هذا السيناريو، ستقوم Dexodata بحفظ البيانات في ملف CSV. الأمر يسير هكذا.

أنشئ طريقة ستكتب المعلومات المستخرجة إلى ملف CSV:

import java.io.BufferedWriter;

import java.io.FileWriter;

import java.io.IOException;

 

public static void writeToCSV(String title, String description, String imageUrl, String outputFilePath) {

    try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath, true))) {

        String csvLine = String.join(",", "\"" + title.replace("\"", "\"\"") + "\"",

                                      "\"" + description.replace("\"", "\"\"") + "\"",

                                      "\"" + imageUrl.replace("\"", "\"\"") + "\"");

        writer.write(csvLine);

        writer.newLine();

    } catch (IOException e) {

        e.printStackTrace();

    }

}

تحتوي هذه التقنية على العنوان، والوصف، وimageUrl، بالإضافة إلى outputFilePath كمعلمات إدخال. لذا، تكتب المعلومات كسطر CSV إلى الملف المحدد. كما أنها تتعامل مع علامات الاقتباس المزدوجة داخل النص عن طريق استبدالها بعلامتين مزدوجتين، كما هو مطلوب من قبل CSV.

13. قم بتحديث تقنية 'extractInformation()' لاستدعاء طريقة 'writeToCSV()' مع المعلومات المجمعة:

public static void extractInformation(Document document, String outputFilePath) {

    // استخراج العنوان، والوصف، وعنوان الصورة كما كان من قبل

 

    // كتابة البيانات المستخرجة إلى ملف CSV

    writeToCSV(title, description, imageUrl, outputFilePath);

}

14. عدل التقنية الرئيسية لتشمل مسار الملف الناتج وتمريره إلى تقنية 'extractInformation()':

public static void main(String[] args) {

    String url = "https://www.example.com";

    String outputFilePath = "output.csv";

    HtmlPage htmlPage = fetchHtmlPage(url);

    if (htmlPage != null) {

        String htmlContent = htmlPage.asXml();

        Document document = parseHtmlContent(htmlContent);

        extractInformation(document, outputFilePath);

    }

}

الآن، عند تشغيل المحلل، يقوم بجلب العنوان، والوصف، وعنوان الصورة من صفحة متجر عبر الإنترنت ويكتب البيانات إلى ملف CSV المحدد. يمكنك تخصيص تنسيق إخراج الملف أكثر، إضافة رؤوس، أو حتى الكتابة إلى تنسيقات ملفات أخرى مثل JSON أو XML حسب متطلباتك الخاصة.

اختبر المحلل الخاص بك عن طريق تشغيل الطريقة الرئيسية مع عنوان URL لصفحة منتج متجر عبر الإنترنت. تأكد من ضبط محددات JSoup وفقاً لهيكل الصفحة الواقعية. يمكنك دائماً ترقية هذا المحلل لاستخراج معلومات إضافية مثل أسعار المنتجات، والمواصفات، أو مراجعات المستخدمين بناءً على المتطلبات المحددة. علاوة على ذلك، يمكن للناس تنفيذ معالجة الأخطاء وسيناريوهات الحالات الطرفية لجعل المحلل الخاص بك أكثر قوة ومرونة. 

مع تحليل الأعمال التجارية الإلكترونية كواحد من السيناريوهات الرئيسية لبروكسيات Dexodata المستهدفة جغرافياً، نحن نعرف مدى روعة إنجاز الأمور مع مثل هذا المحلل.

 

الاستعلام

 

الهدف الرئيسي من برامج جمع البيانات من الويب باستخدام جافا هو كل شيء يتعلق بالاستعلام عن مستند HTML. عادةً ما يكون ذلك مستهلكاً للوقت، لكنه حتمي. 

مع JSoup، هناك طرق متعددة للحصول على المكونات ذات الاهتمام. تشمل هذه التقنيات getElementByID أو getElementsByTag. يتم تبسيط تدفق الاستعلام المرتبط بـ DOM من خلالهم. 

يسمح سيناريوهاتنا باستخدام getElementByID مع getElementsByClass. ومع ذلك، انتبه إلى تمييز مهم. بينما يتم تصميم getElementById (انتبه، إنه مفرد) لإرجاع كائن عنصر واحد، في حالة getElementsByClass (انتبه، إنه جمع، على النقيض) سيتم إرجاع قائمة مصفوفة تحتوي على كائنات عناصر.

بشكل مريح، يتميز JSoup بفئة Elements. ما تفعله هو توسيع ArrayList<Element>. نتيجة لذلك، يصبح الكود أنظف وتُفعل وظائف إضافية.

تظهر الأسطر البرمجية المقدمة أدناه استخدام التقنية first() للحصول على أول مكون في ArrayList. بمجرد الانتهاء، يتم تطبيق التقنية text() لاحقاً للحصول على محتويات النص.

Element firstHeading = document.getElementsByClass("firstHeading").first();

System.out.println(firstHeading.text());

يمكن لقرائنا أن يفترضوا أن هذه الميزات كافية الأداء. في الوقت نفسه، لا تزال محدودة لـ JSoup. في الغالبية العظمى من الحالات، يجب تفضيل وظيفة select. الاستثناء الوحيد الذي يجعلها عديمة الفائدة تماماً هو عندما ينوي الناس بجدية التنقل في مستند لأعلى. إذا كان هذا هو حالك، استخدم خيارات مثل children() وchild() وparent(). فقط قم بزيارة هنا لاستكشاف مجموعة كاملة من التقنيات الممكنة.

تظهر سطر الكود استخدام التقنية selectFirst() المسؤولة عن إرجاع أول تطابق:

Element firstHeading= document.selectFirst(".firstHeading"); 

في سيناريوهاتنا هنا، يتم تطبيق التقنية selectFirst(). إذا كان يجب اختيار عدة مكونات، يمكن للمستخدمين أيضاً الكشف عن إمكانيات وظيفة select(). بهذه الطريقة، يتم الاحتفاظ بمحدد CSS كمعامل. بسيط مثل ABC. علاوة على ذلك، يمكن أن يتم إرجاع مثيل من Elements كامتداد لنوع ArrayList<Element>.

 

الخاتمة

 

من أجل البقاء والتوسع، تلجأ كل فريق تقريباً إلى جمع البيانات من الويب والحصاد (يفضل، بالتواصل مع موقع بروكسي موثوق ومتقدم) لتقييم المعلومات المطلوبة والتنافس مع منافسيهم. إن كونك على دراية بأساسيات جمع البيانات من الويب ومستعد تماماً لبناء مجمعات تعتمد على جافا يعد أمراً قيماً حيث يساعد في اتخاذ قرارات سريعة وفي الوقت المناسب تعتمد على البيانات. ما يساعد بنفس القدر هو موقع بروكسي موثوق يدير نظاماً بيئياً من بروكسيات مستهدفة جغرافياً. على سبيل المثال، في Dexodata يمكن للفرق شراء عناوين IP سكنية للمحللات أو، إذا كانوا جددًا على المنصة، طلب تجربة مجانية للبروكسي.

Back

نحن نسهل ملفات تعريف الارتباط، قراءة المزيد حولسياسة ملفات تعريف الارتباط