jsoup工具去解析html

【背景】

  在上一篇博文 java爬取網頁內容 簡單例子(1)——使用正則表達式 裏面,介紹瞭如何使用正則表達式去解析網頁的內容,雖然該正則表達式比較通用,但繁瑣,代碼量多,現實中想要想出一條簡單的正則表達式 對於沒有很好正則表達式基礎的人——比如說我T_T——是一件蠻困難的事。這一篇,我們改用jsoup,一個強大的解析html工具,去解析html,你會發現,一切都變得很容易。

【準備工作】

下載:jsoup-1.6.1.jar

【先看效果】

目標網站:中國天氣

目的:獲取今天的天氣

目標HTML代碼:

<li class="dn on" data-dn="7d1">
      <h1>今天</h1>
      <h2>8日</h2>
      <big class="jpg50 d04"></big>
      <big class="jpg50 n04"></big>    
      <p class="wea" title="雷陣雨">雷陣雨</p>
      <p class="tem tem1"> <span>33</span><i>°C</i> </p>
      <p class="tem tem2"> <span>25</span><i>°C</i> </p>
      <p class="win">
            <em>
                  <span title="無持續風向" class=""></span>
                  <span title="無持續風向" class=""></span>
            </em>
            <i>微風</i>
      </p>
      <div class="slid"></div>
</li>

解析的java代碼:

(1)審查網頁元素後發現,我們要的內容在上面的目標HTML代碼中,在整個網頁中是在 class=”dn on” data-dn=”7d1” 的<li>

(2)“今天” 兩字在<h1></h1>

(3)“8日” 兩字在<h2></h2>

(4)“雷陣雨” 三字在 class=”wea” 中

(5)“33” 在第一個<span>

(6)“25” 在第二個<span>

(7)“微風” 兩字在 第三個<i>

有了上面的分析,要獲取到這些天氣內容就易如反掌了。

如下java代碼:

 1 package com.zjm.www.test;
 2 
 3 import java.io.IOException;
 4 
 5 import org.jsoup.Jsoup;
 6 import org.jsoup.nodes.Document;
 7 import org.jsoup.select.Elements;
 8 
 9 public class TestJsoup {
10     
11     public  Document getDocument (String url){
12         try {
13             return Jsoup.connect(url).get();
14         } catch (IOException e) {
15             e.printStackTrace();
16         }
17         return null;
18     }
19 
20     public static void main(String[] args) {
21         TestJsoup t = new TestJsoup();
22         Document doc = t.getDocument("http://www.weather.com.cn/html/weather/101280101.shtml");
23         // 獲取目標HTML代碼
24         Elements elements1 = doc.select("[class=dn on][data-dn=7d1]");
25         // 今天
26         Elements elements2 = elements1.select("h1");
27         String today = elements2.get(0).text();
28         System.out.println(today);
29         // 幾號
30         Elements elements3 = elements1.select("h2");
31         String number = elements3.get(0).text();
32         System.out.println(number);
33         // 是否有雨
34         Elements elements4 = elements1.select("[class=wea]");
35         String rain = elements4.get(0).text();
36         System.out.println(rain);
37         // 高的溫度
38         Elements elements5 = elements1.select("span");
39         String highTemperature = elements5.get(0).text()+"°C";
40         System.out.println(highTemperature);
41         // 低的溫度
42         String lowTemperature = elements5.get(1).text()+"°C";
43         System.out.println(lowTemperature);
44         // 風力
45         Elements elements6 = elements1.select("i");
46         String wind = elements6.get(2).text();
47         System.out.println(wind);
48     }
49 }

結果打印出:

1 今天
2 8日
3 雷陣雨
4 33°C
5 25°C
6 微風

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章