프로젝트/백준 풀이 인증 프로그램

스크래핑 > 22.01.20

B612 2022. 3. 17. 20:44

지난 글을 보면 알다시피 백준의 유저 페이지에서 스크래핑, 크롤링 등의 행위는 지양된다

 

나도 robot.txt에 대해 알기 전 몇 번 해보긴 했지만..

그래서 내 블로그에 올라오는 코드들 전부 원래는 URL이 백준의 유저 페이지였지만 변경해서 업로드 한다.

 

자바 크롤링/스크래핑에 대해 검색하면 json과 jsoup이 많이 나왔다

나는 그 중 jsoup을 사용하기로 했다

jsoup은 html을 파싱해주는 자바 오픈 소스 라이브러리이다.

jsoup을 설치하고 (이때 Libraries에서 파일을 정확한 위치에 넣자!! 난 엉뚱한 곳에 넣어 계속 에러 떴다..) 본격적인 스크래핑을 시작했다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main;
 
import java.io.IOException;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
 
public class project{
    public static void main(String[] args) throws IOException {
        String URL = "https://peraspera.tistory.com";
        Document doc = Jsoup.connect(URL).get();
        System.out.println(doc);
    }
}
 
cs

URL에 대해 전체 html을 가져오는 코드이다

실행 결과는 아래와 같다

실행 결과와 실제 html

아래 부분이 잘렸지만, URL의 html이 처음부터 끝까지 잘 가져와졌다

 

html 태그를 제거하고 순수 문자열만 얻고 싶을 때는

String text = doc.text();

를 이용하면 된다

 

또한 클래스 명이 'header'인 항목을 가져오고 싶다면 

Elements items = doc.select("header");

를 이용하면 된다

 

두 가지를 합쳐 클래스 명이 'header'인 항목의 순수 문자열만 가져오는 코드는 아래와 같다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package project;
 
import java.io.IOException;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
public class project {
   public static void main(String[] args) throws IOException {
      String URL = "https://peraspera.tistory.com/";
      Document doc = Jsoup.connect(URL).get();
      
      Elements items = doc.select("header");
      String text = items.text();
      System.out.println(text);
   }
}
cs

 

실행 결과

select를 통해 return되는 element가 많을 경우에는 for문을 사용하면 된다.