본문 바로가기
기타

크롤링(crawling), jsoup

by CodeMango 2023. 2. 17.

 크롤링(crawling)

 인터넷 상에 존재하는 웹 페이지들을 자동으로 탐색하여 그 안에 있는 정보를 수집하는 기술입니다. 
 크롤링은 웹 상의 데이터를 수집하는 데에 매우 유용한 방법으로, 검색 엔진, 가격 비교 사이트, 뉴스 제공 업체, SNS 분석 등 다양한 분야에서 활용됩니다.

크롤러는 웹 사이트를 자동으로 탐색하며, HTML 태그와 CSS, JavaScript 등을 분석하여 원하는 데이터를 추출합니다. 
크롤링을 위해서는 프로그래밍 언어나 도구를 사용해야 하며, 일반적으로 Python, Java, Ruby 등의 언어와 
BeautifulSoup, Scrapy, Selenium, Jsoup 등의 라이브러리나 프레임워크를 사용합니다.

크롤링 기술을 사용하면 수집한 데이터를 분석하고 가공하여 다양한 형태의 정보를 얻을 수 있습니다.


jsoup

JSoup은 Java 언어로 작성된 HTML 파서 라이브러리입니다. 
JSoup을 사용하면 웹 페이지에서 데이터를 추출하고 파싱 할 수 있습니다.
JSoup은 HTML의 모든 요소와 속성을 처리 할 수 있습니다. 
이 라이브러리를 사용하면 웹 페이지에서 텍스트, 링크, 이미지, 테이블 등의 요소를 추출할 수 있습니다. 
또한 JSoup을 사용하면 웹 페이지에서 필요한 데이터를 추출하여 자신의 애플리케이션에서 사용할 수 있습니다.
JSoup은 오픈 소스 라이브러리이며, 웹 스크래핑 및 데이터 마이닝을 위해 많이 사용됩니다. 
또한 JSoup은 Maven 또는 Gradle을 통해 쉽게 프로젝트에 추가할 수 있습니다.

jsoup jar파일을 추가해서 사용할 수 있다.

 

 

차트만들기

차트를 템플릿 사이트로는 HIgh chart 사이트가 있다. 

https://www.highcharts.com/demo

 

Highcharts | Highcharts.com

 

www.highcharts.com

 

Q. cgv에서 영화 제목과 예매율 가져와서 차트 만들기

필요한 파일은 4가지가 있습니다.

MainClass.java  /  index.jsp  /  MovieChart.java  /  MovieDto.java  

 

  1. MovieDto.java 파일 작성: 먼저 영화 제목과 예매율 정보를 저장할 MovieDto 클래스를 작성합니다.
  2. MovieChart.java 파일 작성: Jsoup 라이브러리를 사용하여 CGV 홈페이지에서 영화 제목과 예매율 정보를 크롤링하고, MovieDto 객체를 생성하여 해당 정보를 저장합니다. 이후에 리스트에 저장하여 반환합니다.
  3. MainClass.java 파일 작성: 메인 함수가 있는 클래스인 MainClass.java에서는 MovieChart 클래스의 인스턴스를 생성하고, 반환된 정보를 for 루프를 사용하여 출력합니다.
  4. index.jsp 파일 작성: index.jsp 파일에서는 MovieChart 클래스를 사용하여 CGV 홈페이지에서 영화 제목과 예매율 정보를 가져옵니다. 가져온 정보를 JSON 형태로 변환하여 차트로 출력합니다.

따라서 위의 코드는 크롤링해서 CGV 영화 제목과 예매율을 가져와서, JSON 형태로 변환하여 출력하는 과정이 순서대로 진행되는 것입니다.

 

1. 이클립스 lib에 jsoup jar파일 추가하기

2. MainClass.java에서 Document를 통해 CGV 홈페이지 주소 연결시키기

package main;

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 Exception{
		// TODO Auto-generated method stub

/*
 크롤링(crawling), jsoup
*/


//cgv의 영화제목들을 가져오기 :console값에 순서대로 반환됨
		
		Document doc = Jsoup.connect("http://www.cgv.co.kr/movies/?lt=1&ft=0").get();

																//get으로 document를 리턴
		/*	홈페이지에서 긁어온 태그 보기
	    <div class="box-contents">
        	<a href="/movies/detail-view/?midx=86796">
        	
            <strong class="title">앤트맨과 와스프-퀀텀매니아</strong>
        	</a>

        	<div class="score">
            	<strong class="percent">
            		예매율
            		<span>42.1%</span>
            	</strong> 
*/
		
		// Elements: jsoup.select을 클릭/ class는 도트(.)으로 불러옴
		Elements titles = doc.select("div.box-contents strong.title");
		
		//span태그까지 가져와야함!!
		Elements percents = doc.select("div.box-contents div.score strong.percent span");

		for (int i = 0; i < 19; i++) {
			Element title = titles.get(i);
			Element percent = percents.get(i);
			
			System.out.println(title.text() + " " + percent.text());
		}
	}
}

MainClass 콘솔값

앤트맨과 와스프-퀀텀매니아 40.4%
아임 히어로 더 파이널 16.4%
더 퍼스트 슬램덩크 14.7%
타이타닉 5.8%
마루이 비디오 3.5%
카운트 3.5%
서치 2 3.1%
귀멸의 칼날-상현집결, 그리고 도공 마을로 3.0%
어메이징 모리스 1.3%
아바타-물의 길 1.2%
두다다쿵-후후섬의 비밀 1.1%
상견니 0.9%
다음 소희 0.7%
바빌론 0.6%
방탄소년단: 옛 투 컴 인 시네마 0.6%
더 웨일 0.4%
스즈메의 문단속 0.4%
영웅 0.3%
TAR 타르 0.3%

 

댓글