【背景】
在上一篇博文 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 微風