728x90
jsoup 라이브러리로 웹사이트 크롤링하기
출처 : https://marah.tistory.com/33
Jsoup
HTML 파싱 Java 라이브러리입니다.
DOM, CSS 및 jquery와 같은 방법을 사용하여 데이터를 추출하고 조작하는 편리한 API를 제공합니다.
주로 정적인 웹 페이지를 파싱하고자 하는 경우, 간단하게 HTML을 가져와 파싱을 할 수 있는 라이브러리입니다.
설명 출처: https://jinseongsoft.tistory.com/156 [진성 소프트:티스토리]
jsoup 사용준비방법
build.gradle 의존성추가
//jsoup 의존성 추가
implementation 'org.jsoup:jsoup:1.15.3'
1. 크롤링 할 웹사이트 주소 지정
https://www.hkbs.co.kr/news/articleList.html?sc_section_code=S1N1&view_type=sm
2. 크롤링 할 사이트 html 구조와 가져올 데이터 확인
3. 크롤링한 데이터를 저장할 객체 만들기 news 클래스생성
@Getter : Getter 메소드를 생성해 준다. (값을 가져옴)
@ToString : ToString 메소드 자동 생성 (객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴)
@Builder : 값을 주입하여 객체를 만드는 용도
News.java
@Getter
@Builder
@ToString
public class News {
private String image;
private String subject;
private String url;
}
5. NewsService 생성
@Service
public class NewsService {
private static String News_URL = "크롤링 할 URL";
@PostConstruct
public List<News> getNewsDatas() throws IOException {
List<News> newsList = new ArrayList<>();
Document document = Jsoup.connect(News_URL).get();
Elements contents = document.select("section ul.type2 li");
for (Element content : contents) {
News news = News.builder()
.image(content.select("a img").attr("abs:src")) // 이미지
.subject(content.select("h4 a").text()) // 제목
.url(content.select("a").attr("abs:href")) // 링크
.build();
newsList.add(news);
}
return newsList;
}
}
6. NewsController 생성
@Controller
public class NewsController {
private final NewsService newsService;
public NewsController(NewsService newsService) {
this.newsService = newsService;
}
@GetMapping("/news")
public String news(Model model) throws Exception{
List<News> newsList = newsService.getNewsDatas();
model.addAttribute("news", newsList);
return "news";
}
}
6. 출력화면 news.html 파일 작성
<div>
<table class= "table">
<tr>
<th>이미지</th>
<th>제목</th>
</tr>
<tr th:each="news : ${news} ">
<td><a th:href="${news.url}"><img th:src="${news.image}"></a></td>
<td><a th:href="${news.url}"><span th:text="${news.subject}"></span></a></td>
</a>
</tr>
</table>
</div>
크롤링 성공 출력 화면
728x90
'Follow Work > SpringbootBoard' 카테고리의 다른 글
[HTML CSS] 반응형 테이블 디자인 (0) | 2022.10.14 |
---|---|
[HTML] iframe 유튜브 동영상 자동 연속재생 (14) | 2022.10.06 |
[Markdown] SimpleMDE Markdown Editor 적용 방법 (0) | 2022.09.28 |
[API] SpringBoot 네이버 쇼핑 API 출력하기 (0) | 2022.09.27 |
[HTML CSS JS] 네비게이션 바 만들기 (0) | 2022.09.27 |