웹 크롤링이란 ?
web, xml, json을 통해서 데이터를 수질할 수 있는 기능 (Web page의 tag를 통해서 데이터를 취합)
데이터 수집 : Java(jsoup), python(Beautiful Soup) - 제일 어렵다.
데이터 정형화 : 필요없는 문자 추려내기, 문자 검토하여 단어 형태로 만들어 놓는 것, (일반 -> 배열, 리스트)
분석 : 머신러닝
결과의 시각화 : app, web
우선 jsoup.jar파일이 필요하다.
해당 사이트에서 파일 다운로드가 가능하다.
다이나믹 웹 프로젝트의 lib폴더에 다운받은 jar파일을 추가한다.
Jsoup : 각종 사이트(HTML)에서 데이터를 취합할 수 있는 Library
데이터를 크롤링 할 사이트를 선택한다.
필자는 CGV 무비 차트 사이트에서 크롤링을 해보려 한다.
해당 사이트에 들어가 페이지 소스보기를 클릭한다.
해당 사이트의 html문서가 열리게 된다.
이곳에서 가져올 정보의 태그명과 클래스명 또는 아이디명을 가져온다.
예제 Class
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MainClass {
public static void main(String[] args) throws IOException {
// 자료를 가져올 사이트에 연결하기
Document doc = Jsoup.connect("http://www.cgv.co.kr/movies/").get();
// System.out.println(doc.data()); // html 코드를 가져온다.
/* 크롤링 예시
<div class="box-contents">
<a href="/movies/detail-view/?midx=82986">
<strong class="title">블랙 위도우</strong>
</a>
<div class="score">
<strong class="percent">예매율<span>23.2%</span></strong>
<!-- 2020.05.07 개봉전 프리에그 노출, 개봉후 골든에그지수 노출변경 (적용 범위1~ 3위)-->
<div class='egg-gage small'>
*/
Elements titles = doc.select("div.box-contents strong.title");
// 묶기전 큰 묶음부터 묶어주는게 좋다.
Elements percents = doc.select("div.box-contents div.score strong.percent span");
for (int i = 0; i < 7; i++) {
Element title = titles.get(i);
Element percent = percents.get(i);
System.out.println(title.text() + " : "+ percent.text()); // 보고있는 사이트의 영화 제목을 다 가져온다.
}
}
}
Document
해당 사이트의 html 문서 전체
connect(url).get()
자료를 가져올 사이트에 연결하기
Elements
select로 접근한 요소에 관련된 Element 데이터를 담는 자료형
Element
select로 접근한 요소
실행결과
블랙 위도우 : 21.7%
랑종 : 14.6%
이스케이프 룸 2-노 웨이 아웃 : 5.8%
크루엘라 : 1.8%
꽃다발 같은 사랑을 했다 : 0.8%
오필리아 : 0.7%
(월간오페라)카발레리아 루스티카나 : 0.3%
'IT > Java' 카테고리의 다른 글
[자바] REST API 연동하기 예제 (0) | 2022.12.21 |
---|---|
JAVA 용어정리 (0) | 2021.09.16 |
[자바] ArrayList / LinkedList / ArrayList 에 어떠한 클래스 든 다 저장하고 싶은 경우 (0) | 2021.06.01 |
[자바] 상속/오버라이딩 (0) | 2021.06.01 |
[자바] 싱글톤(Sington) (0) | 2021.05.31 |