본문 바로가기
교육/Server

JDBC 개발자 수업 84일차 - 크롤링(crawling)

by yhyuk 2021. 7. 28.
728x90
반응형

크롤링(crawling)


크롤링(crawling)

[ 정의 ]

- 웹상의 페이지들에게서 내가 원하는 정보를 수집하는 행위

- ex) 맛집 블로그 방문 > 식당 정보를 얻고 싶다면? > 블로그의 소스를 긁어서 원하는 데이터 추출 > "크롤링"

출처: 네이버 영화 랭킹이며 F12 개발자 모드에서 HTML 확인하는 모습

 

 

[ 주의점 ]

- 허가 문제, 저작권 문제가 상당히 많다. ( 크롤링을 하려면 "정도껏" 긁는 작업을 해야한다. )

- 이유? 프로그램 > 속도 빠름 & 횟수 많음 > 서버 입장 > 트래픽 과부하 > 소송 > 크롤링 금지(동작 불능) 사이트가 많아졌다.

 

[ 크롤링을 하려면? ]

1) HTML / CSS 이해도 ( JavaScript 조금 )

2) jsoup 다운로드 https://jsoup.org/download

 

Download and install jsoup

Download and install jsoup jsoup is available as a downloadable .jar java library. The current release version is 1.14.1. What's new See the 1.14.1 release announcement for the latest changes, or the changelog for the full history. Previous releases of jso

jsoup.org

 

[ 예제 - 네이버 영화 랭킹 크롤링 해오기 ]

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>

# 크롤링을 만약 필요로 한다면, 가장 기억해야할 것은 적당히 정도껏 해야 하는것을 기억하자.

# 이번주는 이수 과정 중에서 첫번째로 중요한 웹 프로젝트로 오전수업 후 오후에는 팀작업을 한다.
728x90
반응형

댓글