336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
대부분 크롤링을 할 때 python을 많이 사용하는 듯하다. 나도 python으로 크롤링을 해보았는데 자바 개발자이다 보니 익숙한 자바로 크롤링을 할 수 있는 Jsoup 라이브러리를 사용하였다.
jsoup는 java로 사용할 수 있는 HTML Parser기능을 가진 java 라이브러리이다.
https://jsoup.org/ 여기에 들어가보면 친절하게 기능이 무엇이고 사용법이 무엇인지 알려준다.
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 소개와 작성법을 알아보자 읽어보면 된다.