728x90
★ 크롤링(Crawling)
- 웹 사이트 > 페이지를 탐색해서 내가 원하는 데이터를 수집하는 행동
a. 상대방이 나에게 DB권한을 준다면..? > 실질적으로 불가능
b. 상대방이 외부에 OpenAPI를 공개 > 일부 공개 > 무난한 방법
c. a(x), b(x) > 웹페이지의 소스를 가져와서 직접 원하는 데이터를 추출하는 방법 > 크롤링
- 크롤링 주의점!
- 허가 문제, 저작권 문제
- 정도껏~ > 긁어오는 작업 > 프로그램 > 속도 빠름!! & 횟수 많음!! > 서버 부하 + 트래픽 발생
- 크롤링 금지 사이트(접속 불가능 처리)
- 크롤링 사전 지식
1. HTML 이해
2. CSS 이해, JavaScript 이해
3. 자바 기반 > 클라이언트 코드 파싱 라이브러리
■ Jsoup
- 브라우저처럼 사이트 접속 > 접속한 URL 페이지 소스 읽기 > 브라우저처럼 소스 분석 > 탐색 + 데이터 읽기
- JavaScript DOM 느낌
- 라이브러리 설치
- https://jsoup.org/
- 상위 Download 클릭, jsoup-1.1.6.1.jar 다운
- 이클립스 라이브러리에 파일 추가
★ 코드 작성
■ Ex01) : 내 페이지를 크롤링 하기
- 전체 소스를 가져오기
try {
String url = "http://localhost:8090/crawling/ex01.do";
//문서 최상위 객체 > 읽어온 페이지 소스를 관리 객체
Document doc = Jsoup.connect(url).get();
System.out.println(doc.html());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- 실행 결과
- 특정 태그의 소스를 가져오기
//선택자를 이용하여 가져오기
Elements list = doc.select("h1");
Element h1 = list.get(0);
System.out.println(h1.text());
Elements plist = doc.select(".desc");
for (Element e : plist) {
System.out.println(e.text());
}
- 실행 결과
■ Ex02) : 다른 사이트 크롤링 하기
- 해당 사이트 개발자 도구 -> 요소 선택 -> 오른쪽 클릭 -> Select복사 -> 경로를 복사
- yes24.com
- 제목, 저자, 가격 가져오기
try {
String url = "http://www.yes24.com/Product/Goods/118625612";
Document doc = Jsoup.connect(url).get();
//#yDetailTopWrap > div.topColRgt > div.gd_infoTop > div > h2
Element title = doc.select("#yDetailTopWrap > div.topColRgt > div.gd_infoTop > div > h2").get(0);
System.out.println(title.text());
System.out.println(doc.select("#yDetailTopWrap > div.topColRgt > div.gd_infoTop > span.gd_pubArea > span.gd_auth > a").get(0).text());
System.out.println(doc.select("#yDetailTopWrap > div.topColRgt > div.gd_infoBot > div.gd_infoTbArea > div:nth-child(3) > table > tbody > tr.accentRow > td > span > em").get(0).text());
} catch (Exception e) {
e.printStackTrace();
}
- 실행 결과
728x90
'크롤링&스크래핑' 카테고리의 다른 글
Crawling STEP 3 - 셀레니움을 통해 JavaScript로 선언된 데이터 가져오기 (0) | 2023.05.26 |
---|---|
Crawling STEP 2 - 다음 영화페이지 크롤링 (0) | 2023.05.26 |