JsoupJsoup 시작하기

비고

Jsoup는 유연성과 사용 편의성에 중점을 둔 Java 용 HTML 파싱 및 데이터 추출 라이브러리입니다. 그것은 일반적으로 "웹 스크래핑"으로 알려진 HTML 페이지에서 특정 데이터를 추출하고 HTML 페이지의 내용을 수정하고 허용 된 태그 및 속성의 화이트리스트로 신뢰할 수없는 HTML을 "정리"하는 데 사용할 수 있습니다.

자바 스크립트 지원

Jsoup는 JavaScript를 지원하지 않으므로 페이지로드 후 페이지에 추가되는 동적으로 생성 된 콘텐츠 나 콘텐츠는 페이지에서 추출 할 수 없습니다. 자바 스크립트로 페이지에 추가되는 내용을 추출해야하는 경우, 몇 가지 다른 옵션이 있습니다 :

  • 실제 웹 브라우저를 사용하여 페이지를로드하는 Selenium이나 HtmlUnit과 같이 JavaScript를 지원하는 라이브러리를 사용하십시오.

  • 페이지가 데이터를로드하는 방법을 리버스 엔지니어링합니다. 일반적으로 데이터를 동적으로로드하는 웹 페이지는 AJAX를 통해 수행되므로 브라우저의 개발자 도구의 네트워크 탭에서 데이터가로드되는 위치를 확인한 다음 해당 URL에서 코드를 사용할 수 있습니다. 자세한 내용은 AJAX 페이지를 다듬는 방법을 참조하십시오.

공식 웹 사이트 및 문서

Jsoup.org 에서 Javadoc , Jsoup 요리 책의 사용 예제, JAR 다운로드 등 다양한 Jsoup 관련 리소스를 찾을 수 있습니다. 소스 코드, 문제점 및 풀 요청에 대해서는 GitHub 저장소 를 참조하십시오.

다운로드

Jsoup는 Maven에서 org.jsoup.jsoup:jsoup 로 사용할 수 있습니다. Gradle을 사용하는 경우 (예 : Android Studio에서) build.gradle 종속성 섹션에 다음을 추가하여 프로젝트에 추가 할 수 있습니다.

compile 'org.jsoup:jsoup:1.8.3'

Ant (Eclipse)를 사용하는 경우 POM 종속성 섹션에 다음을 추가하십시오.

<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.8.3</version>
</dependency>

Jsoup는 다른 환경을위한 다운로드 가능한 JAR 로도 제공됩니다.

버전

번역 출시일
1.9.2 2016-05-17
1.8.3 2015-08-02

링크의 URL 및 제목 추출

Jsoup는 웹 페이지에서 모든 링크를 쉽게 추출하는 데 사용될 수 있습니다. 이 경우 Jsoup을 사용하여 원하는 특정 링크 (여기서는 페이지의 h3 헤더에있는 링크) 만 추출 할 수 있습니다. 우리는 또한 링크 텍스트를 얻을 수 있습니다.

Document doc = Jsoup.connect("http://stackoverflow.com").userAgent("Mozilla").get();
for (Element e: doc.select("a.question-hyperlink")) {
    System.out.println(e.attr("abs:href"));
    System.out.println(e.text());
    System.out.println();
}

그러면 다음과 같은 결과가 출력됩니다.

http://stackoverflow.com/questions/12920296/past-5-week-calculation-in-webi-bo-4-0
Past 5 week calculation in WEBI (BO 4.0)?

http://stackoverflow.com/questions/36303701/how-to-get-information-about-the-visualized-elements-in-listview
How to get information about the visualized elements in listview?

[...]

여기서 일어나는 일들 :

  • 먼저 지정된 URL에서 HTML 문서를 가져옵니다. 또한이 코드는 요청의 사용자 에이전트 헤더를 "Mozilla"로 설정하여 웹 사이트가 일반적으로 브라우저에 제공 할 페이지를 제공합니다.

  • 그런 다음 select(...) 및 for 루프를 사용하여 스택 오버플로 질문에 대한 모든 링크를 가져옵니다 (이 경우에는 클래스 question-hyperlink .

  • .text() 를 사용하여 각 링크의 텍스트를 인쇄하고 attr("abs:href") 을 사용하여 링크의 href를 인쇄하십시오. 이 경우 abs: 를 사용하여 절대 URL을 얻습니다. 도메인과 프로토콜이 포함되어 있어야합니다.

부분 HTML에서 전체 URL 추출

링크의 속성 값 만 선택 : href는 상대 URL을 반환합니다.

   String bodyFragment = 
          "<div><a href=\"/documentation\">Stack Overflow Documentation</a></div>";


    Document doc = Jsoup.parseBodyFragment(bodyFragment);
    String link = doc
            .select("div > a")
            .first()
            .attr("href");
    
    System.out.println(link);

산출

/documentation

parse 메소드에 기본 URI를 전달하고 attr 대신 absUrl 메소드를 사용하여 전체 URL을 추출 할 수 있습니다.

    Document doc = Jsoup.parseBodyFragment(bodyFragment, "http://stackoverflow.com");
    
    String link = doc
                .select("div > a")
                .first()
                .absUrl("href");
    
    System.out.println(link);

산출

http://stackoverflow.com/documentation

HTML 문서 파일에서 데이터 추출

Jsoup는 HTML이 포함 된 로컬 파일 에서 데이터를 조작하거나 추출하는 데 사용할 수 있습니다. filePath 는 디스크에있는 파일의 경로입니다. ENCODING 이 필요합니다. 문자 세트 이름 (예 : "Windows-31J"). 선택 사항입니다.

 // load file
    File inputFile = new File(filePath);
    // parse file as HTML document
    Document doc = Jsoup.parse(filePath, ENCODING);
    // select element by <a> 
    Elements elements = doc.select("a");