반응형
.
라이브러리 파일을 받아주자.
https://mvnrepository.com/artifact/org.jsoup/jsoup/1.18.1
bugs 차트를 가져와서 연습 해 볼 것이다.
https://music.bugs.co.kr/chart
해당 라인을 100개 가져와야 한다.
title, artist 를 가져오는 코드이다.
<%
String crawlingUrl = "https://music.bugs.co.kr/chart";
Document doc = Jsoup.connect(crawlingUrl).get();
Elements titles = doc.select("p.title > a");
Elements artists = doc.select("p.artist > a");
pageContext.setAttribute("titles", titles);
pageContext.setAttribute("artists", artists);
%>
화면에 뿌려주기 위한 코드이다.
<div class="body-main">
<div class="container">
<div class="row">
<c:forEach items="${titles}" var="title" varStatus="status">
<div class="col-4">${status.index +1}</div>
<div class="col-4">${title}</div>
<div class="col-4">${artists[status.index]}</div>
</c:forEach>
</div>
</div>
</div>
아래와 같이 데이터가 나열 될 것이다.
데이터 베이스 저장을 해보자. oracle을 이용한 것이다.
user 이름은 bugs
비밀번호는 bugs1234
라고 지정 해 주었다.
계정 생성은 아래를 참고한다.
https://allemptysheep.tistory.com/42
오라클 데이터베이스에 저장을 위한 DAO를 하나 만들어 주었다.
mysql 에서 했던것과 같이 Elements 를 받아서 for문으로 돌면서 저장한다.
다른점이 있다면 sql에서 duplicate key를 처리하기 위해서 Merge Into 를 사용 했다는 것이다.
import javax.servlet.ServletContext;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import common.JDBConnect;
public class BugsDAO extends JDBConnect {
public BugsDAO (ServletContext application) {
super(application);
}
public int insertSong(Elements titles, Elements artists) {
int rs = 0;
for(Element title: titles) {
int rankData = titles.indexOf(title)+1;
String titleData = title.text();
String artistData = artists.get(titles.indexOf(title)).text();
System.out.println(rankData);
System.out.println(titleData);
System.out.println(artistData);
// String sql = "INSERT INTO songs VALUES (?, ?, ?, SYSDATE)) ON DUPLICATE KEY UPDATE num = (?)";
String sql = "MERGE INTO songs USING dual ON ( title = (?) AND regdate = SYSDATE) " +
"WHEN MATCHED THEN UPDATE SET num = (?)" +
"WHEN NOT MATCHED THEN INSERT (num, title, artist, regdate) VALUES (?, ?, ?, SYSDATE)";
try {
psmt = con.prepareStatement(sql);
psmt.setString(1, titleData);
psmt.setInt(2, rankData);
psmt.setInt(3, rankData);
psmt.setString(4, titleData);
psmt.setString(5, artistData);
rs = psmt.executeUpdate();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/*
*/
return rs;
}
}
이제 화면에서 DAO 를 호출하여 함수를 사용 해 보자.
<%
String crawlingUrl = "https://music.bugs.co.kr/chart";
Document doc = Jsoup.connect(crawlingUrl).get();
Elements titles = doc.select("p.title > a");
Elements artists = doc.select("p.artist > a");
pageContext.setAttribute("titles", titles);
pageContext.setAttribute("artists", artists);
// System.out.println(titles);
BugsDAO bugsDAO = new BugsDAO(application);
bugsDAO.insertSong(titles, artists);
%>
<div class="body-main">
<div class="container">
<div class="row">
<c:forEach items="${titles}" var="title" varStatus="status">
<div class="col-4">${status.index +1}</div>
<div class="col-4">${title}</div>
<div class="col-4">${artists[status.index]}</div>
</c:forEach>
</div>
</div>
</div>
데이터 베이스에서 아래와 같이 저장 될 것이다.
'JSP' 카테고리의 다른 글
[JSP] jsoup 를 이용한 크롤링 및 MYSQL 데이터 베이스 저장 (0) | 2024.08.01 |
---|---|
[JSP] {"readyState":4,"responseText":"test","status":200,"statusText":"parsererror"} (0) | 2024.07.23 |
[JSP] 네이버 이메일을 이용한 SMTP (0) | 2024.07.15 |
[JAVA] 접근 제한자 네 가지 (0) | 2024.06.24 |
[JAVA] JDK 설치 및 환경 변수 설정 (0) | 2024.05.24 |