선택자
태그명 : 태그이름으로 접근
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();
}
}
결과
Java - ServerSocket, 클라이언트에 응답하기 (0) | 2018.10.04 |
---|---|
Java - ServerSocket, Thread를 적용한 에코메시지 테스트 (0) | 2018.10.04 |
Java - json 개요, Gson 사용 (0) | 2018.10.04 |
Java - XML 파싱 후 List로 출력하기 (0) | 2018.10.04 |
Java - 네이버 캡챠 API 이미지 발급/수신/비교 (0) | 2018.10.04 |
댓글 영역