웹 스크래핑은 웹 페이지에서 데이터를 추출하는 데 사용되는 데이터 스크래핑, 웹 수집 또는 웹 크롤링이라고도 합니다. 웹 스크레이퍼는 정보를 추출하기 위해 다양한 접근 방식을 사용할 수 있습니다. 예를 들어, 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>jdk17</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 쿼리 기술을 탐색할 수 있습니다. 또한 추가 정보나 도움이 필요하면 포럼을 통해 언제든지 저희에게 연락하십시오.