โปรแกรมขูดเว็บ Java

Web Scraping เรียกอีกอย่างว่าการขูดข้อมูล การเก็บเกี่ยวเว็บ หรือการรวบรวมข้อมูลเว็บซึ่งใช้เพื่อแยกข้อมูลจากหน้าเว็บ Web Scraper สามารถใช้วิธีการต่างๆ ในการดึงข้อมูล ตัวอย่างเช่น XPath, ตัวเลือก CSS, ตัวกรองแบบกำหนดเอง, การนำทาง HTML เป็นต้น บทความนี้ครอบคลุมถึงวิธีการสร้างเว็บสเครปเปอร์โดยทางโปรแกรมใน Java เพื่อให้สอดคล้องกับสถานการณ์ดังกล่าว

การกำหนดค่า Java Web Scraping Library

Aspose.HTML for Java API รองรับคุณสมบัติการขูดเว็บโดยใช้เทคนิคต่างๆ คุณสามารถเข้าถึง API ได้โดยดาวน์โหลดไฟล์ JAR จากหน้า ดาวน์โหลด หรือใช้การกำหนดค่า 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 ใน Java

คุณสามารถทำงานกับคลาส Node เพื่อไปยังหน้า HTML ได้ ข้อมูลโค้ดด้านล่างแสดงวิธีการนำทางเอกสาร HTML ใน Java:

// เตรียมรหัส HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// เริ่มต้นเอกสารจากรหัสที่เตรียมไว้
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // รับการอ้างอิงถึงลูกคนแรก (ช่วงแรก) ของ 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 และองค์ประกอบใน Java

คุณสามารถทำงานกับวิธีการผ่านองค์ประกอบเพื่อนำทางหน้า HTML ตัวอย่างโค้ดด้านล่างอธิบายวิธีการตรวจสอบเอกสาร HTML ใน Java

// โหลดเอกสารจากไฟล์
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 ใน Java

คุณสามารถตั้งค่าตัวกรองแบบกำหนดเองเพื่อข้ามหรือยอมรับตัวกรองเฉพาะเพื่อทำงานกับ Web Scraper ใน Java ตัวอย่างโค้ดด้านล่างอธิบายวิธีการทำงานกับตัวกรองแบบกำหนดเองหรือที่ผู้ใช้กำหนดในเว็บสเครปเปอร์โดยใช้ Java:

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();
    }
}

การขูดเว็บโดยใช้ XPath Query ใน Java

คุณสามารถเลือกโหนดต่างๆ ของเอกสาร HTML ตามเกณฑ์ต่างๆ โดยใช้ XPath รหัสด้านล่างสาธิตวิธีการขูดเว็บโดยใช้ XPath Query ใน Java:

// เตรียมรหัส 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 ลูกทั้งหมดจากองค์ประกอบที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'ความสุข':
    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();
    }
}

การขูดเว็บด้วย CSS Selector ใน Java

คุณสามารถค้นหารายการที่ต้องการในโปรแกรมขูดเว็บโดยใช้ตัวเลือก CSS คุณสามารถระบุพารามิเตอร์เป็นตัวเลือกแบบสอบถาม จากนั้นรายการของตัวเลือกที่ตรงกันจะถูกส่งกลับไปยังตัวขูดเว็บ ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ตัวเลือก CSS ในเว็บสเครปเปอร์โดยใช้ Java:

// เตรียมรหัส 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 ที่แยกองค์ประกอบทั้งหมดที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'มีความสุข' และองค์ประกอบย่อย 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();
    }
}

บทสรุป

ในบทความนี้ คุณได้สำรวจวิธีการต่างๆ ที่สามารถใช้สร้าง Web Scraper ใน Java คุณต้องทำการเรียก API เพียงไม่กี่ครั้งโดยใช้ไลบรารี Aspose.HTML for Java เพื่อสร้าง Web Scraper ใน Java คุณสามารถสำรวจการนำทาง HTML, ตัวเลือก CSS, ตัวกรองแบบกำหนดเอง และเทคนิคการสืบค้น XPath ได้ในบทความนี้ นอกจากนี้ โปรดติดต่อเราผ่านทาง ฟอรัม หากคุณต้องการข้อมูลเพิ่มเติมหรือความช่วยเหลือใดๆ

ดูสิ่งนี้ด้วย

แปลง EPUB เป็น XPS ใน Java