Spring - Jsoup을 이용한 웹크롤링

2018. 5. 7. 19:47Web/Spring

Spring - Jsoup을 이용한 웹크롤링


채팅을 개발하던 도중에 간단히 챗봇 기능을 만들어보면 어떨까 하는 생각에 오늘 날씨를 물어보면 오늘 날씨에 대한 정보를 답장으로 보내주는 채팅을 구현하기 위해 Jsoup을 이용한 웹크롤링을 진행해보았습니다.




pom.xml



1
2
3
4
5
<dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.8.3</version>
</dependency>
cs





웹 크롤링 코드



1
2
3
4
5
String URL = "https://weather.naver.com/rgn/cityWetrMain.nhn";
Document doc = Jsoup.connect(URL).get();
Elements elem = doc.select(".tbl_weather tbody>tr:nth-child(1)");
String[] str = elem.text().split(" ");
Elements elem2=doc.select(".tbl_weather tbody>tr:nth-child(1) img");
cs


1. Document doc=Jsoup.connect(URL).get(); => 지정한 url의 html태그를 모두 가져옵니다. html태그를 문자열 형태로 다 가져옵니다.


2.Elements elem=doc.select("~"); => 지정한 url에서 가져온 html태그 중에 원하는 태그를 가져옵니다. 괄호 안에는 css 선택자를 지정하여 원하는 태그를 가져옵니다. 결과는 문자열로 html태그들을 모두 가져옵니다. 만약 태그들을 그대로 적용할 생각이라면 elem2를 jsp로 리턴하여 사용하면 됩니다.


3.String str=elem.text(); =>elem안에 담긴 html태그에서 문자열을 모두 가져오는 메소드입니다. 단순히 태그가 아니라 문자열들만 가져오고 싶다면 이메소드를 이용해서 문자열들을 가져오면 됩니다.


String str=elem.text( ); 가 가져온 텍스트

=>서울 경기 구름많음 기온 15.0℃ 강수확률 20% 구름조금 기온 25.0℃ 강수확률 10%


Elements elem=doc.select("~"); 가 가져온 텍스트

=>

<tr> 

 <th scope="row"> <a href="/rgn/cityWetrWarea.nhn?cityRgnCd=CT001000"> 서울<br> 경기 </a> </th> 

 <td> <p class="icon"><img src="https://ssl.pstatic.net/static/weather/images/w_icon/w_l21.gif" width="64" height="46" alt="구름많음"></p> 

  <ul class="text"> 

   <li class="nm">구름많음</li> 

   <li>기온 <span class="temp"><strong>15.0</strong>℃</span><br> 강수확률 <span class="rain"><strong>20</strong>%</span></li> 

  </ul> </td> 

 <td class="line"> <p class="icon"><img src="https://ssl.pstatic.net/static/weather/images/w_icon/w_l2.gif" width="64" height="46" alt="구름조금"></p> 

  <ul class="text"> 

   <li class="nm">구름조금</li> 

   <li>기온 <span class="temp"><strong>25.0</strong>℃</span><br> 강수확률 <span class="rain"><strong>10</strong>%</span></li> 

  </ul> </td> 

</tr>


Elements elem2=doc.select("~"); 가 가져온 텍스트

=>

<img src="https://ssl.pstatic.net/static/weather/images/w_icon/w_l21.gif" width="64" height="46" alt="구름많음">

<img src="https://ssl.pstatic.net/static/weather/images/w_icon/w_l2.gif" width="64" height="46" alt="구름조금">






결과 



텍스트들은 elem.text()를 이용하여 가져온 것들이고 사진은 elem2를 이용해 img태그를 그대로 이용한 것입니다.