- 사이드 프로젝트로 무작위 메뉴를 추천하고, 메뉴 레시피를 인터넷에서 가져오는 로직을 작성하고 있다.
- api를 사용하지 않고 레시피가 많이 작성되있는 다른 사이트에서 데이터를 크롤링해서 가져오려고 한다.
- 이때 데이터를 크롤링하기 위해 Java에서는 JSoup를 사용할 수 있다.
설치
- build.gradle의 dependencies에 다음 줄을 추가해준다.
implementation 'org.jsoup:jsoup:1.15.3'
HTML 가져오기
- 특정 사이트에서 html 데이터를 가져오고 싶으면 connect().get()을 사용하면 된다.
String crawlingURL = "https://some.url.com";
Document document = Jsoup.connect(crwalingURL).get();
- 만약 HTML 텍스트를 가져올 수 있다면 parse()를 사용한다.
File input = new File("/static/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://some.url.com/");
가져온 HTML에서 데이터 가져오기
- HTML에서 특정한 DOM만을 가져오고 싶으면 select()와 css 선택자를 사용하면 된다.
- attr()을 통해 속성을, text()를 통해 InnerText를, html()을 통해 선택된 부분의 html을 가져올 수 있다.
String crawlingURL = "https://some.url.com";
Document searchResultDoc = Jsoup.connect(crawlingURL).get();
String detailHref = searchResult.select(".className").
getFirst().
select("a").
attr("href");
Document detailResult = Jsoup.connect(String.format("%s%s", recipeDomain, detailHref)).get();
ArrayList<String> resultArray = new ArrayList<>();
Elements targetElements = detailResult.select("#domID div");
targetElements.forEach(target -> {
System.out.println(target.select("h4").getFirst().text());
});
출처:
https://jsoup.org