본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



대부분 크롤링을 할 때 python을 많이 사용하는 듯하다. 나도 python으로 크롤링을 해보았는데 자바 개발자이다 보니 익숙한 자바로 크롤링을 할 수 있는 Jsoup 라이브러리를 사용하였다.


jsoup는 java로 사용할 수 있는 HTML Parser기능을 가진 java 라이브러리이다. 


https://jsoup.org/ 여기에 들어가보면 친절하게 기능이 무엇이고 사용법이 무엇인지 알려준다.


jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.


jsoup는 DOM, CSS, jquery 메소드 같은 것들을 사용하여 데이터를 추출할수 있는 매우 편리한 API를 제공하는 java Library라고 한다.(영어 잘하고싶다..)


jSoup에서 제공하는 method와 사용법을 모두 다 설명할 순 없으니 간략하게 설명을 하자면 먼저 jsoup에 필요한 라이브러리를 추가한다. 


그다음 나는 yahoo에서 검색순위 랭크 1~10까지의 결과 값을 가져오고 싶다. 그렇다면 아래와 같이 코드를 짜면 된다.





1
2
3
4
5
<dependency>
          <groupId>org.jsoup</groupId>
          <artifactId>jsoup</artifactId>
          <version>1.11.3</version>
</dependency>



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package net.crawler;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class Main {
    public static void main(String[] args) {
        String url = "https://yahoo.com";
        
        Document doc = null;
        
        try {
            doc = Jsoup.connect(url).get();
            
            Elements els = doc.select(".trending-list");
            System.out.println(els);
        } catch(Exception e) {
            
        }
    }
}



약간의 꿀팁


결과값을 가져오지 못하는 경우에는 header에 값을 추가해줘야하는 경우가 발생한다. 그렇다면 요런식으로 헤더에 값을 추가해서 요청을 보내고 가져올 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try {
    doc = Jsoup.connect(url)
            .userAgent("Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36")
            .header("scheme""https")
            .header("accept""text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
            .header("accept-encoding""gzip, deflate, br")
            .header("accept-language""ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,es;q=0.6")
            .header("cache-control""no-cache")
            .header("pragma""no-cache")
            .header("upgrade-insecure-requests""1")
            .get();
    
catch (IOException e) {
    e.printStackTrace();
}
cs


크롤링은 함부로하면 안된다. 사이트의 robots.txt를 보고 꼭 크롤링을 하도록 하자

robots.txt를 모른다면 robots.txt 소개와 작성법을 알아보자 읽어보면 된다.