상세 컨텐츠

본문 제목

Java - Jsoup을 이용한 크롤링으로 네이버 실시간 순위 가져오기 (20.07.30 수정)

개발/Java

by 뉴에이스 2018. 10. 4. 13:31

본문

선택자
	태그명 : 태그이름으로 접근
	select("div") : div 태그를 모두 선택
	
	.이름 : 태그의 속성의 이름이 class 인 것중에서 속성의 값이 이름과 같은것
	select(".a") : 태그의 class="a"인 모든 태그를 선택
	
	#값 : 태그의 속성의 이름이 id 인 것중에서 속성의 값이 #뒤의 값과 같은것
	select("#a") : 태그의 id="a"인 모든 태그를 선택
	
	a b : a 태그의 자식 태그중에서 b 태그를 모두 선택 (a 태그의 자손 태그까지 모두 선택)
	a > b : a 태그의 자식 태그중에서 b 태그를 모두 선택 (a 태그의 바로 밑에 있는 자식만 선택)
	select("a b")
	select("a > b")
				a
			b		c
		c	d		d	b
	select("table > tr td > img.a") : table 밑에 있는 img 클래스 이름이 a 인것 선택 (실제로는 tbody 경로 적어줘야 함)

	태그의 속성으로 접근하기
	: 태그명[속성명=값]
	: 태그명[속성명^=값] : 값으로 시작하는 것
		a[href ^= http]
	: 태그명[속성명$=값] : 값으로 끝나는 것
		img[src $= jpg]
	: 태그명[속성명*=값] : 값이 포함하는 것
		img[src *= flower]

 

Jsoup 라이브러리 다운로드 및 추가

mavenrepository 접속

mvnrepository.com/artifact/org.jsoup/jsoupmvnrepository.com/artifact/org.jsoup/jsoup

최신 버전 jar 파일로 다운로드하거나

maven/gradle dependency 설정에 추가

 

Java 소스

 

예전 www.naver.com  에서 바로 출력되던 방식이 변경되어 순위 확인 URL과 접근 선택자 부분을 수정함

public static void main(String[] args) {
	try {
		Document doc = Jsoup.connect("https://datalab.naver.com/keyword/realtimeList.naver").get();

		// 브라우저 전체 html 내용 확인
		//System.out.println(doc.html());
		
		// 실시간 검색어 1~20위
		// Elements pList = doc.select("div > div > ul > li > div > span);

		// 1~20위만 출력하는 태그에 접근
		Elements pList = doc.select("ul.ranking_list > li.ranking_item > div.item_box");
		//System.out.println(pList.html());

		// span.item_num, item_title
		for (Element e : pList) {
			//System.out.println(e.html());
			
			// for문 내에서는 반환되는 결과값이 하나이기때문에 0번째 인덱스로 접근
			System.out.println(
					e.select("span.item_num").get(0).html() + 
					". " + 
					e.select("span.item_title").get(0).html()
					);
		}

	} catch (IOException e) {
		e.printStackTrace();
	}

}

 

결과

 

관련글 더보기

댓글 영역