Web Scraper Java

Web Scraping همچنین به خراش دادن داده، برداشت وب یا خزیدن وب نیز گفته می شود که برای استخراج داده ها از صفحات وب استفاده می شود. یک وب اسکراپر می تواند از روش های مختلفی برای استخراج اطلاعات استفاده کند. به عنوان مثال، انتخابگرهای XPath، CSS، فیلترهای سفارشی، ناوبری HTML، و غیره. مطابق با چنین سناریوهایی، این مقاله نحوه ایجاد یک اسکراپر وب به صورت برنامه‌نویسی در جاوا را پوشش می‌دهد.

پیکربندی کتابخانه خراش وب جاوا

Aspose.HTML برای جاوا API با استفاده از تکنیک‌های مختلف، ویژگی‌های اسکراپی وب را پشتیبانی می‌کند. شما به سادگی می توانید با دانلود فایل های JAR از صفحه دانلودها به API دسترسی پیدا کنید یا از تنظیمات Maven زیر در فایل pom.xml پروژه خود استفاده کنید:

مخزن:

 <repositories>
     <repository>
         <id>snapshots</id>
         <name>repo</name>
         <url>http://repository.aspose.com/repo/</url>
     </repository>
</repositories>

وابستگی:

 <dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>21.12</version>
        <classifier>jdk17</classifier>
    </dependency>
</dependencies>

خراش دادن وب با ناوبری HTML در جاوا

برای پیمایش صفحات HTML می توانید با کلاس Node کار کنید. قطعه کد زیر نحوه پیمایش یک سند HTML در جاوا را نشان می دهد:

// یک کد HTML آماده کنید
String html_code = "<span>Hello</span> <span>World!</span>";

// یک سند را از کد آماده شده اولیه کنید
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // مرجع اولین فرزند (اولین SPAN) BODY را دریافت کنید
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // ارجاع به عنصر دوم SPAN را دریافت کنید
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

بازرسی سند HTML و عناصر آن در جاوا

برای پیمایش در صفحات HTML می توانید با روش پیمایش عنصر کار کنید. نمونه کد زیر نحوه بازرسی اسناد HTML در جاوا را توضیح می دهد.

// یک سند را از یک فایل بارگیری کنید
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // عنصر html سند را دریافت کنید
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // آخرین عنصر عنصر html را دریافت کنید
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // اولین عنصر عنصر بدنه را دریافت کنید
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

استفاده از فیلتر سفارشی برای Web Scraper در جاوا

می‌توانید یک فیلتر سفارشی تنظیم کنید تا فیلترهای خاصی را برای کار با web scraper در جاوا نادیده بگیرید یا بپذیرید. نمونه کد زیر نحوه کار با فیلترهای سفارشی یا تعریف شده توسط کاربر در وب اسکرپر با استفاده از جاوا را توضیح می دهد:

public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // فیلتر فعلی از همه عناصر به جز عناصر IMG عبور می کند.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

پس از تنظیم یک فیلتر سفارشی، می توانید به راحتی با استفاده از قطعه کد زیر در صفحه HTML پیمایش کنید:

// یک کد HTML آماده کنید
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// یک سند را بر اساس کد آماده شده اولیه کنید
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // برای شروع ناوبری HTML باید یک نمونه از TreeWalker ایجاد کنیم.
    // پارامترهای مشخص شده به این معنی است که از ریشه سند شروع به راه رفتن می کند، همه گره ها را تکرار می کند و از پیاده سازی سفارشی ما از فیلتر استفاده می کند.
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // استفاده کنید
    while (iterator.nextNode() != null) {
        // از آنجایی که ما از فیلتر خود استفاده می کنیم، گره فعلی همیشه نمونه ای از HTMLImageElement خواهد بود.
        // بنابراین، ما در اینجا نیازی به اعتبارسنجی اضافی نداریم.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // خروجی: image1.png
        // خروجی: image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Scraping وب با استفاده از XPath Query در جاوا

با استفاده از XPath می توانید گره های مختلف یک سند HTML را با معیارهای مختلف انتخاب کنید. کد زیر نحوه انجام اسکراپینگ وب با استفاده از XPath Query در جاوا را نشان می دهد:

// یک کد HTML آماده کنید
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello ! </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World </span >\n" +
              "    </p >\n";

// یک سند را بر اساس کد آماده شده اولیه کنید
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // در اینجا ما عبارت XPath را ارزیابی می‌کنیم که در آن همه عناصر فرزند SPAN را از عناصری انتخاب می‌کنیم که ویژگی «class» برابر با «happy» است:
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // روی گره های به دست آمده تکرار کنید
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // خروجی: سلام
        // خروجی: جهان!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Scraping وب با انتخابگر CSS در جاوا

با استفاده از انتخابگر CSS می توانید موارد مورد نیاز را در یک وب اسکراپر جستجو کنید. می توانید پارامتری را به عنوان انتخابگر پرس و جو تعیین کنید و سپس لیستی از منطبق بر انتخابگر به وب scraper بازگردانده می شود. نمونه کد زیر نحوه استفاده از انتخابگر CSS را در یک وب اسکریپر با استفاده از جاوا نشان می دهد:

// یک کد HTML آماده کنید
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World ! </span >\n" +
              "    </p >\n";

// یک سند را بر اساس کد آماده شده اولیه کنید
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // در اینجا ما یک انتخابگر CSS ایجاد می کنیم که تمام عناصری را که ویژگی 'class' برابر با 'happy' است و عناصر SPAN فرزند آنها را استخراج می کند.
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // روی فهرست به دست آمده از عناصر تکرار کنید
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // خروجی: سلام
        // خروجی: جهان!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

نتیجه

در این مقاله، روش‌های مختلفی را بررسی کرده‌اید که می‌توان از آنها برای ایجاد وب‌اسکریپر در جاوا استفاده کرد. شما فقط باید با استفاده از کتابخانه Aspose.HTML for Java چند تماس API برقرار کنید تا یک وب scraper در جاوا ایجاد کنید. در این مقاله می توانید تکنیک های HTML Navigation، CSS Selector، Custom filter و XPath Query را بررسی کنید. علاوه بر این، لطفاً در صورت نیاز به اطلاعات بیشتر یا هر گونه کمکی، از طریق [فروم 5 با ما در تماس باشید.

همچنین ببینید

تبدیل EPUB به XPS در جاوا