본문 바로가기
Programming/Spring

[Spring] Jsoup을 이용한 지니 뮤직비디오 웹 크롤링 (Jsoup select 문법)

by jionee 2021. 2. 26.
SMALL

Jsoup 크롤링 라이브러리

자바로 만들어진 HTML Parser

HTML 문서를 읽어 들인 후 DOM 객체로 변환

* 파이썬 HTML Parse = BeautifulSoup

 

 

Jsoup 라이브러리 추가

 

https://jsoup.org/

 

jsoup Java HTML Parser, with the best of HTML5 DOM methods and CSS selectors.

jsoup: Java HTML Parser jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors. jsoup implements the WHATWG H

jsoup.org

.jar 파일 다운 받아서 추가 

 

프로젝트 우클릭 > Properties > Java Build Path > Add External JARs > .Jar파일추가

 

 

 

 

 

Jenie M/V 크롤링

 

크롤링할 사이트 : www.genie.co.kr/search/searchMv?query=아이유

 

아이유 통합검색_동영상 - genie

AI기반 감성 음악 추천

www.genie.co.kr

 

 

소스 코드

package com.genie.demo.dao;

import java.io.IOException;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.Iterator;
import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



public class crawling {

	public static void main(String[] args) {
		// Jsoup를 이용해서 뮤직비디오 크롤링
		String name = "아이유";  //검색할 Artist
		String url = "https://www.genie.co.kr/search/searchMv?query=" + name;//크롤링할 url
		Document doc = null;        
		  
		 
		 try {
		 
		 doc = Jsoup.connect(url).get();	//Document에는 페이지의 전체 소스가 저장된다
		 
		 } 
		 catch (IOException e) {
		 
		 e.printStackTrace();
		 
		 }
		    
		 //select를 이용하여 원하는 태그를 선택한다.

		 Elements element = doc.select("tr.list");		// MV 리스트가 있는 태그
		 String defaulturl = "https://www.genie.co.kr/detail/mediaInfo?xvnm=";
		    
		 for (Element element1 : element) {
		 System.out.println("제목 : " + element1.select("td a").attr("title") );	//제목 크롤링
		 System.out.println("url : " + defaulturl + element1.attr("mvid") );		//url id 크롤링
		 System.out.println("썸네일 : " + element1.select("td a img").attr("src") + "\n" );	//썸네일 크롤링
		 }


	}

}

 

 

1. Document  객체를 선언하고, 크롤링할 페이지의 url을 입력

		String name = "아이유";  //검색할 Artist
		String url = "https://www.genie.co.kr/search/searchMv?query=" + name;//크롤링할 url
		Document doc = null;        
		  
		 
		 try {
		 
		 doc = Jsoup.connect(url).get();	//Document에는 페이지의 전체 소스가 저장된다
		 
		 } 
		 catch (IOException e) {
		 
		 e.printStackTrace();
		 
		 }

* artist의 이름을 입력하는 쿼리 부분을 별도의 변수로 받아서 name 변수만 바꾸면 다른 가수의 MV 크롤링 가능

 

 

 

2. 크롤링할 웹 페이지에서 개발자 도구를 사용해 html 코드 분석

크롤링할 부분을 감싸는 태그 = tr태그의 클래스 list

 

 

3. 제목, MV url, 썸네일 url 정보를 가지고 있는 tr.list를 elements에 넣고 for each 문으로 추출

		 //select를 이용하여 원하는 태그를 선택한다.

		 Elements element = doc.select("tr.list");		// MV 리스트가 있는 태그
		 String defaulturl = "https://www.genie.co.kr/detail/mediaInfo?xvnm=";
		    
		 for (Element element1 : element) {
		 System.out.println("제목 : " + element1.select("td a").attr("title") );	//제목 크롤링
		 System.out.println("url : " + defaulturl + element1.attr("mvid") );		//url id 크롤링
		 System.out.println("썸네일 : " + element1.select("td a img").attr("src") + "\n" );	//썸네일 크롤링
		 }

* Element : Document의 HTML 요소

* Elements : Element가 모인 자료형. for나 while 등 반복문 사용이 가능하다.

 

 

***Jsoup select 문법

jsoup.org/cookbook/extracting-data/selector-syntax

 

Use selector-syntax to find elements: jsoup Java HTML parser

Use selector-syntax to find elements Problem You want to find or manipulate elements using a CSS or jquery-like selector syntax. Solution Use the Element.select(String selector) and Elements.select(String selector) methods: File input = new File("/tmp/inpu

jsoup.org

doc.select("a") : <a> 요소를 모두 선택

doc.select("#logo") : id="logo" 인 요소를 선택

doc.select(".list") : class="list"인 요소들을 선택

 

 

 

 

결과 화면

 

댓글