시작하기에 앞서 DOM의 개념과 HTML parsing 개념을 대충 정리하고 시작해보자.
2022.03.25 - [분류 전체보기] - DOM(Document Object Model) - 문서 객체 모델 기초개념
HTML parsing :
String으로 받아온 HTML 파일을 DOM객체(HTML DOM)로 변환 후 원하는대로 Parsing
------예제 시작-------
목표 타 사이트 > 무신사 (잡지) https://www.musinsa.com/category/014001
시작하기 이전에 해당 jar파일을 받아
해당 예제를 실행할 폴더의 WebContent밑에 WEB-INF 밑에 있는 lib에 넣는다.
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 |