웹 스크레이퍼 자바

웹 스크래핑은 웹 페이지에서 데이터를 추출하는 데 사용되는 데이터 스크래핑, 웹 수집 또는 웹 크롤링이라고도 합니다. 웹 스크레이퍼는 정보를 추출하기 위해 다양한 접근 방식을 사용할 수 있습니다. 예를 들어, XPath, CSS 선택기, 사용자 정의 필터, HTML 탐색 등. 이러한 시나리오에 따라 이 기사에서는 Java에서 프로그래밍 방식으로 웹 스크레이퍼를 만드는 방법을 다룹니다.

자바 웹 스크래핑 라이브러리 구성

Aspose.HTML for Java API는 다양한 기술을 사용하여 웹 스크래핑 기능을 제공합니다. 다운로드 페이지에서 JAR 파일을 다운로드하거나 프로젝트의 pom.xml 파일에서 다음 Maven 구성을 사용하여 API에 간단히 액세스할 수 있습니다.

저장소:

 <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>jdk16</classifier>
    </dependency>
</dependencies>

Java에서 HTML 탐색을 사용한 웹 스크래핑

HTML 페이지를 탐색하기 위해 Node 클래스로 작업할 수 있습니다. 아래 코드 스니펫은 Java에서 HTML 문서를 탐색하는 방법을 보여줍니다.

// HTML 코드 준비
String html_code = "<span>Hello</span> <span>World!</span>";

// 준비된 코드에서 문서 초기화
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // BODY의 첫 번째 자식(첫 번째 SPAN)에 대한 참조 가져오기
    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();
    }
}

Java에서 HTML 문서 및 해당 요소 검사

요소 순회 방법으로 작업하여 HTML 페이지를 탐색할 수 있습니다. 아래 코드 샘플은 Java에서 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
    
    // body 요소의 첫 번째 요소 가져오기
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

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

Java에서 XPath 쿼리를 사용한 웹 스크래핑

XPath를 사용하여 다른 기준에 따라 HTML 문서의 다른 노드를 선택할 수 있습니다. 아래 코드는 Java에서 XPath 쿼리를 사용하여 웹 스크래핑을 수행하는 방법을 보여줍니다.

// 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 {
    // 여기에서 'class' 속성이 'happy'와 동일한 요소에서 모든 하위 SPAN 요소를 선택하는 XPath 표현식을 평가합니다.
    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();
    }
}

Java에서 CSS 선택기를 사용한 웹 스크래핑

CSS 선택기를 사용하여 웹 스크레이퍼에서 필요한 항목을 검색할 수 있습니다. 매개변수를 쿼리 선택기로 지정하면 일치하는 선택기 목록이 웹 스크레이퍼로 반환됩니다. 다음 코드 샘플은 Java를 사용하여 웹 스크레이퍼에서 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 {
    // 여기에서 'class' 속성이 'happy'와 같은 모든 요소와 해당 하위 SPAN 요소를 추출하는 CSS 선택기를 만듭니다.
    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();
    }
}

결론

이 기사에서는 Java에서 웹 스크레이퍼를 만드는 데 사용할 수 있는 다양한 방법을 살펴보았습니다. Java로 웹 스크레이퍼를 생성하려면 Aspose.HTML for Java 라이브러리를 사용하여 몇 가지 API 호출만 하면 됩니다. 이 기사에서 HTML 탐색, CSS 선택기, 사용자 정의 필터 및 XPath 쿼리 기술을 탐색할 수 있습니다. 또한 추가 정보나 도움이 필요하면 포럼을 통해 언제든지 저희에게 연락하십시오.

또한보십시오

자바에서 EPUB를 XPS로 변환