dullin
덜린의 코딩 항해 일지
dullin
전체 방문자
오늘
어제
  • 분류 전체보기 (257)
    • JAVA (19)
    • JAVASCRIPT (3)
    • HTML_CSS (3)
    • DB (35)
      • Oracle (16)
      • MySQL (17)
    • JAVA_SERVLET (5)
    • 오류노트 (4)
    • Library & API (6)
    • Spring (20)
      • 개발준비(setting) (1)
      • 전자정부프레임워크 (5)
    • 인공지능 (2)
    • Python (13)
    • OpenCV (1)
    • AI-900 (5)
    • Django (6)
    • Linux (0)
    • Android Studio (12)
    • React Native (1)
    • 프로 크리에이트 (1)
    • 오늘의 일기 (0)
    • PHP (2)
    • Next.js (0)

블로그 메뉴

  • 카테고리
  • 글쓰기
  • 홈

공지사항

인기 글

태그

  • 강철맷집
  • 모두_화이팅
  • 예끼에러야
  • 오블완
  • laravel
  • 선빵필승
  • 갈증해소완료
  • Safe Mode
  • 코딩
  • 개발환경 세팅
  • 티스토리챌린지
  • 덤벼라
  • 오갈완
  • 오늘도 에러박살
  • 덤벼라 스프링
  • 코딩왕이_되는_그_날까지
  • 라라벨
  • 오늘도 오류 한모금
  • 필사즉생행생즉사
  • 오늘도 즐코딩

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dullin

덜린의 코딩 항해 일지

HTML parsing - 타 사이트 정보 가져와서 DB에 저장
Library & API

HTML parsing - 타 사이트 정보 가져와서 DB에 저장

2022. 3. 26. 13:32

시작하기에 앞서 DOM의 개념과 HTML parsing 개념을 대충 정리하고 시작해보자.

 

2022.03.25 - [분류 전체보기] - DOM(Document Object Model) - 문서 객체 모델 기초개념

 

DOM(Document Object Model) - 문서 객체 모델 기초개념

DOM이란? 문서 객체 모델은 XML이나 HTML문서에 접근하기 위한 일종의 인터페이스이다. + dom은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공한다. DOM의 종류 Core DOM : 모든

dys-r.tistory.com

HTML parsing :

String으로 받아온 HTML 파일을  DOM객체(HTML DOM)로  변환 후 원하는대로 Parsing


------예제 시작-------

목표 타 사이트 > 무신사 (잡지) https://www.musinsa.com/category/014001

 

시작하기 이전에 해당 jar파일을 받아

해당 예제를 실행할 폴더의 WebContent밑에 WEB-INF 밑에 있는 lib에 넣는다.

jsoup-1.14.3.jar
0.40MB

  Jsoup - 자바를 위한 HTML 파서기능을 제공하는 라이브러리.  

 

DB에 테이블 생성

-- html parsing무신사 사이트 잡지 데이터 담을 테이블 생성
CREATE TABLE TBL_MUSINSA_SAMPLE(
    NO NUMBER PRIMARY KEY,
    TITLE VARCHAR2(2000),
    INFO VARCHAR2(4000),
    PRICE VARCHAR2(1000),
    LINK VARCHAR2(2000)
);

 

 

자바에서 파일 생성

package app;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Map;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import utils.DBconn;

public class HTMLParser { 
	public static void main(String[] args) throws Exception{
		Connection conn = Jsoup.connect("https://www.musinsa.com/category/014001");
		Document doc = conn.get();
		doc.select(".reply");
		Elements elements = doc.select(".li_box");
		for (int i = 0; i < elements.size(); i++) {
			Element el = elements.get(i);
//			System.out.println(el);
			String no = el.attr("data-no");
			String title = el.selectFirst(".item_title").text();
			String info = el.selectFirst(".list_info").text();
			String price = el.selectFirst(".price").text();
			String link = el.selectFirst(".list_info a").attr("href");
			Element img = el.selectFirst(".list_img img");
			
			Map<String, String> map = new HashMap<>();
			map.put("no", no);
			map.put("title", title);
			map.put("info", info);
			map.put("price", price);
			map.put("link", link);
			System.out.println(map);
			
			saveDB(map);
			saveFile(no, img.attr("data-original"));
			System.out.println(no + "번 작업 완료");
		}
	}
	
	static void saveFile(String no, String imgSrc) throws Exception{ // 지정위치에 데이터 저장
		URL url = new URL(imgSrc);
		BufferedInputStream bis = new BufferedInputStream(url.openStream());
		File file = new File("D:\\mu", no); // "D:\\mu" >> 저장할 드라이브, 파일명 지정 
		if(!file.exists()) {
			file.mkdirs();
		}
		
		file = new File(file, "thumb.jpg");
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
		
		int b = 0;
		while((b = bis.read()) != -1) {
			bos.write(b);
		}
		bos.close();
	}
	
	static void saveDB(Map<String, String> map) throws Exception{ // DB에 정보 담는 메서드
		PreparedStatement pstmt = DBconn.getConnection().prepareStatement(
				"INSERT INTO TBL_MUSINSA_SAMPLE VALUES(?, ?, ?, ?, ?)");
		pstmt.setString(1,  map.get("no"));
		pstmt.setString(2,  map.get("title"));
		pstmt.setString(3,  map.get("info"));
		pstmt.setString(4,  map.get("price"));
		pstmt.setString(5,  map.get("link"));
		pstmt.executeUpdate();
		pstmt.close();
	}
}

 


실행 후

-데이터가 들어간것이 콘솔에 찍힌것을 확인할 수 있다.

 

DB에 정보가 잘 담겨있는지 확인

 

 

 성공 

 

저작자표시 (새창열림)

'Library & API' 카테고리의 다른 글

Hikari - 히카리 커넥션 풀(Connection pool) 사용해보기  (0) 2022.03.29
jQuery - RSS(xml parsing)를 이용한 기사내용 크롤링하기  (0) 2022.03.26
주소 팝업(+검색) api 사용 - jsp  (0) 2022.03.26
이메일 발송  (0) 2022.03.26
DOM(Document Object Model) - 문서 객체 모델 기초개념  (0) 2022.03.25
    'Library & API' 카테고리의 다른 글
    • jQuery - RSS(xml parsing)를 이용한 기사내용 크롤링하기
    • 주소 팝업(+검색) api 사용 - jsp
    • 이메일 발송
    • DOM(Document Object Model) - 문서 객체 모델 기초개념
    dullin
    dullin

    티스토리툴바