JavaRush /Java Blog /Random-KO /jsoup를 사용한 쉬운 HTML 구문 분석
Stanislav
레벨 21
Москва

jsoup를 사용한 쉬운 HTML 구문 분석

Random-KO 그룹에 게시되었습니다
아마도 언젠가는 애플리케이션의 웹사이트나 HTML 문서에서 정보를 얻어야 할 것입니다. jsoup 라이브러리를 사용하면 작업이 크게 단순화될 것이라고 더 이상 고민하지 않겠습니다. Wiki 에 따르면 jsoup는 HTML 문서에 저장된 데이터를 구문 분석, 추출 및 조작하기 위해 설계된 오픈 소스 Java 라이브러리입니다.

빠른 시작

라이브러리는 jar 파일로 다운로드하여 프로젝트에 배치하거나 Maven/Gradle을 사용하여 연결할 수 있습니다. 기사 마지막 부분에 공식 웹사이트 링크를 남겨두겠습니다. 여기에서 현재 버전의 라이브러리를 찾을 수 있습니다. 이 예에서는 Maven을 통한 연결을 사용합니다. 종속성을 추가해 보겠습니다.
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

용법

우선, Document구문 분석 소스를 나타내는 org.jsoup.nodes.Document에서 클래스의 인스턴스를 가져와야 합니다. 로컬 파일일 수도 있고 링크일 수도 있습니다. 예를 들어, 이 기사에서는 yandex.ru 웹사이트를 사용하여 최신 뉴스 피드를 가져오려고 합니다.
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agent방문 중인 사이트에 전달되는 식별자입니다. 많은 사이트에서 이는 스팸 방지 필터의 가장 중요한 기준입니다. Referrer요청 소스의 URL을 포함합니다. 이 메소드는 get()처리된 IOException을 발생시키므로 모든 것을 try/catch블록으로 래핑하거나 throws. 이제 이 페이지의 소스 코드를 받았습니다. 필요한 경우 jsoup 라이브러리 자체가 손상된 요소를 복원할 수 있습니다. 이제 우리가 해야 할 일은 검색 범위를 별도의 블록으로 좁히는 것뿐입니다. 이 방법에는 select()다양한 용도가 있습니다. 태그, 속성, 클래스 및 기타 매개변수를 기준으로 요소를 검색할 수 있습니다. 거의 모든 최신 브라우저는 선택한 요소의 소스 코드를 빠르게 검색하는 기능을 지원합니다. 간단한 조작을 통해 필요한 요소의 소스 코드를 찾고 div지정된 클래스가 있는 블록을 가져와 샘플링에 사용할 수 있습니다. jsoup를 사용한 쉬운 HTML 구문 분석 - 1org.jsoup.select.Elements의 클래스를 사용하여 Elements선택한 블록에서 모든 요소를 ​​선택해 보겠습니다.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
이제 다음과 같은 것이 있습니다. jsoup를 사용한 쉬운 HTML 구문 분석 - 2이제 우리가 해야 할 일은 작은 루프를 사용하여 모든 요소를 ​​반복하는 것입니다.
for (Element element : listNews.select("a"))
            System.out.println(element.text());
이 방법을 text()사용하면 마크업 코드를 삭제하고 들어오는 모든 요소에 대한 텍스트 조합만 남길 수 있습니다. 실행 결과는 다음과 같습니다. jsoup를 사용한 쉬운 HTML 구문 분석 - 3수신된 실제 행 수가 페이지의 실제 표시와 일치하지 않는다는 것을 쉽게 알 수 있습니다. 여기에 함정이 있습니다. 마크업의 소스코드를 보면 특정 시간 간격으로 최신 뉴스가 애니메이션으로 바뀌는 것을 알 수 있습니다. 이러한 "돌" 중 일부는 추가 샘플링과 테스트를 통해 해결됩니다. 처음 5개 요소에는 필요한 정보가 포함되고 여섯 번째 요소에는 스크립팅된 빈 줄만 포함되는 것으로 나타날 수 있습니다. 또한 블록에 식별자가 없는 경우 메서드를 사용하여 get(int index)해당 요소의 위치 번호를 직접 가리키는 것이 가능합니다.
System.out.println(listNews.select("a").get(2).text());

결론

이 예는 jsoup이 할 수 있는 것의 작은 부분만을 보여줍니다. 사이트가 자주 업데이트되어 마크업 코드의 구조가 변경된다는 사실도 있으므로 스크래핑 작업을 할 때는 변경 사항에 적응할 준비가 되어 있어야 합니다. 공식 웹사이트 jsoup.org 에서 더 많은 정보와 최신 버전을 얻을 수 있으며 , o7planning.org 에서 클래스와 메소드에 대한 자세한 내용을 읽을 수 있습니다 . 내 github 에 대한 링크를 남겨두겠습니다 . 이 글을 쓰는 시점에는 Jsoup을 사용하여 정보를 수신하고 표시하는 여러 Telegram 봇이 있습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION