크롤링(crawling)
크롤링(crawling)
[ 정의 ]
- 웹상의 페이지들에게서 내가 원하는 정보를 수집하는 행위
- ex) 맛집 블로그 방문 > 식당 정보를 얻고 싶다면? > 블로그의 소스를 긁어서 원하는 데이터 추출 > "크롤링"
[ 주의점 ]
- 허가 문제, 저작권 문제가 상당히 많다. ( 크롤링을 하려면 "정도껏" 긁는 작업을 해야한다. )
- 이유? 프로그램 > 속도 빠름 & 횟수 많음 > 서버 입장 > 트래픽 과부하 > 소송 > 크롤링 금지(동작 불능) 사이트가 많아졌다.
[ 크롤링을 하려면? ]
1) HTML / CSS 이해도 ( JavaScript 조금 )
2) jsoup 다운로드 https://jsoup.org/download
[ 예제 - 네이버 영화 랭킹 크롤링 해오기 ]
1) 준비 작업
- 예제 사이트: https://movie.naver.com/movie/running/current.naver 네이버 영화 사이트에서 원하는 내용 크롤링
- jsoup.-1.14.1.jar 파일이 해당 프로젝트 폴더에 있어야함 (Build Path 필수)
- 원하는 키워드를 크롤링 해오려면 HTML과 CSS의 이해도가 있어야한다. > selector(선택자) 패턴을 잘 찾아야 하기 때문이다.
2) 코드
- 크롤링할 페이지(네이버 영화)에서 F12(개발자모드)를 열고 인스트럭터를 하나씩 찍어서 선택자를 찾아야 한다.
- tip) 인스터럭터를 찍어서 선택자를 찾았다면, 우클릭으로 selector copy 기능을 사용하면 좀 더 수월하게 찾을 수 있다.
// 네이버 현재 상영 영화
String url = "https://movie.naver.com/movie/running/current.naver";
Document doc = Jsoup.connect(url).get();
Elements list = doc.select("div.lst_wrap > ul.lst_detail_t1 > li");
MovieDAO dao = new MovieDAO();
for ( Element item : list ) {
String title = item.select(".tit > a").text();
String temp = item.select(".info_txt1 dd:nth-child(2)").text();
temp = temp.replace(" ", "").replace("개봉", "");
String[] templist = temp.split("\\|"); // "|"는 예약어로 인식되기때문에 이스케이프 \\ 꼭 시킬것
String outline = "";
String time = "";
String rdate = "";
if (templist.length == 2) {
time = templist[0].replace("분", "");
rdate = templist[1];
} else {
outline = templist[0];
time = templist[1].replace("분", "");
rdate = templist[2];
}
System.out.println("제목: " + title);
System.out.println("장르: " + outline);
System.out.println("상영시간: " + time);
System.out.println("개봉날짜: " + rdate);
System.out.println("===========================================");
String director = item.select("dd:nth-child(4) .link_txt").text();
String actor = item.select("dd:nth-child(6) .link_txt").text();
String poster = item.select(".thumb > a > img").attr("src");
}
3) 결과
[ 크롤링 작업이 하기 어려운 이유? ]
- 크롤링을 하려면 선택자 패턴을 잘 찾아야한다. > 어렵다 > 개발자 역량에 따라 틀림
- 예제 네이버 영화 페이지는 다소 간단한 소스코드로 되있어서 가능했지만, 왠만하면 페이지 선택자 패턴 찾기가 힘들다. 패턴 찾기가 어려운 페이지는 크롤링을 포기하는 경우도 많다.
MEMO>
# 크롤링을 만약 필요로 한다면, 가장 기억해야할 것은 적당히 정도껏 해야 하는것을 기억하자.
# 이번주는 이수 과정 중에서 첫번째로 중요한 웹 프로젝트로 오전수업 후 오후에는 팀작업을 한다.
'교육 > Server' 카테고리의 다른 글
JDBC 개발자 수업 86일차 - 쿠키(cookie) - 로그인시 아이디 기억하기 (0) | 2021.07.28 |
---|---|
JDBC 개발자 수업 85일차 - 크롤링(crawling) - 셀레니움, 웹 자동화 프로그램 (0) | 2021.07.28 |
JDBC 개발자 수업 83일차 - 기본 게시판 만들기 - OpenAPI를 이용하여 지도 만들기 (0) | 2021.07.25 |
JDBC 개발자 수업 82일차 - 기본 게시판 만들기(2) - OpenAPI를 이용하여 책 검색하기 (0) | 2021.07.25 |
JDBC 개발자 수업 82일차 - 기본 게시판 만들기(1) - OpenAPI를 이용하여 차트 추가하기 (0) | 2021.07.25 |
댓글