Jsoup - Java Html Crawler & Parser

Engineer Edlin·2022년 9월 20일
0
post-thumbnail

https://www.tutorialspoint.com/jsoup 의 내용을 참고하여 내용을 정리하고 실습을 진행하였습니다.

Java Crwaler인 Java 라이브러리 Jsoup에 대해 살펴봅니다. Crawler4j 라이브러리도 있지만 2018년 이후 업데이트가 없어 현재까지 업데이트를 지원하고 있는 Jsoup을 사용하였습니다.

1. Jsoup?

  • Jsoup- Java Html Parser
  • 자바 라이브러리
  • URL이나 HTML file의 데이터를 추출하거나 조작한다.

1) Jsoup 라이브러리 기능들

  • 다양한 종류를 파싱할 수 있다.
    • HTML, URL, file, string 이 다양한 종류에 해당한다.
  • CSS selectors(class 값, id 값)를 DOM traversal을 사용하여 데이터를 추출할 수 있다.
    • jquery 문법을 사용할 수 있게끔 ```
  • DOM 조작이 가능하다. (= HTML의 요소들을 조작할 수 있다.)
  • XSS 공격을 예방 - 화이트 리스트에 맞지 않는 내용이 있다면 이를 지운다.

    XSS (= Cross Site Scripting) 공격:

    공격자가 상대방의 브라우저에 특정 스크립트가 실행되도록 하여 사용자의 세션을 가로채거나, 웹 사이트를 변조하는 것

  • 깨끗한 HTML을 결과로 내놓는다.
  • 닫히지 않은 태그나 명확하지 않은 태그를 조작하여 깔끔한 문서 구조를 만들 수 있도록 조작할 수 있다.


2. Parsing

1) 기본 파싱

  • HTML 을 파싱하는 것이다.
  • String, HTML 파일 등 여러가지 형태를 읽어, 돔 구조로 변형해주고 접근할 수 있다.

2) 일부 부분을 가지고 파싱하기

  • HTML 의 전체 구조가 완벽히 갖춰지지 않았더라도 파싱이 가능하다.
  • 완벽한 구조를 가진 HTML 로 만들어 준 뒤, 파싱을 진행한다.
Document document = Jsoup.parseBodyFragment("html fragment"); 

3) URL로 로딩하여 파싱하기

  • url을 통해 연결하여 html file을 읽어올 수 있고, 이를 DOM 구조로 변형시킬 수 있다.
String url = "https://www.google.com";
Document document = Jsoup.connect(url).get();



3. URL 로딩 후 파싱하기 - 실습

  • Jsoup libraryselect 메소드는 jQuery-like selector syntax 이 적용 가능하다.
    • e.g.) 즉, doc.select("h3.r > a")와 같이 사용할 수 있다.
  • select 메소드를 사용하면서 주의할 점을 발견할 수 있었다.
  • .text()의 경우 자식들을 스페이스로 구분하여 하나의 String으로 출력한다.
  • 만약, 자식 중 값이 존재하지 않는다면 출력되는 결과에 포함되지 않기 때문에 7개의 열을 읽어온다고 했을 때, 각 단어 사이 6 개의 공백이 존재해야 하나, 5 개의 공백만 존재할 수 있다.
    • 장점은 일일이 자식 값을 접근하지 않고도 공백으로 구분되어 하나의 String으로 출력할 수 있다는 점이다.
    • 단점은 예를 들어 각각의 자식 값(여기서는 <td>)을 파싱한다거나, 각각의 자식 값이 없다는 것을 null과 같은 상태로 표시하여주어야 하는 경우, 이를 따로 표시하여 결과를 출력할 수 없다는 것이다.
  • 위 단점을 극복하기 위해, .chilren() 메소드를 사용하여 각각의 자식 값에 접근할 수 있다.

    코드는 다소 길어지겠지만, 자식 각각의 값이 null인지 아닌지를 파악하여야 하는 경우, 각 자식 값을 한 번씩만 읽으면서 필요한 결과로 출력할 수 있다는 것이다.

  • 코드를 보며 위 서술된 내용을 차근차근 살펴보도록 하자.
profile
담대하게 도전하고 기꺼이 실패를 받아들이는 개발자

0개의 댓글