java爬蟲簡單例子——附jsoup的select用法詳解
在上一篇博文 java爬取網頁內容 簡單例子(1)——使用正規表示式
裡面,介紹瞭如何使用正規表示式去解析網頁的內容,雖然該正規表示式比較通用,但繁瑣,程式碼量多,現實中想要想出一條簡單的正規表示式
對於沒有很好正規表示式基礎的人——比如說我T_T——是一件蠻困難的事。這一篇,我們改用jsoup,一個強大的解析html工具,去解析html,你
會發現,一切都變得很容易。
出處:
【準備工作】
:jsoup-1.6.1.jar
【先看效果】
目標網站:中國天氣
目的:獲取今天的天氣
目標HTML程式碼:
複製程式碼
今天
8日
雷陣雨
33°C
25°C
微風
複製程式碼
解析的java程式碼:
(1)審查網頁元素後發現,我們要的內容在上面的目標HTML程式碼中,在整個網頁中是在 class="dn on" data-dn="7d1" 的中
(2)“今天” 兩字在中
(3)“8日” 兩字在中
(4)“雷陣雨” 三字在 class="wea" 中
(5)“33” 在第一個中
(6)“25” 在第二個中
(7)“微風” 兩字在 第三個 中
有了上面的分析,要獲取到這些天氣內容就易如反掌了。如下java程式碼:
複製程式碼
1 package com.zjm.
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("");
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 微風
【詳解】
附:
jsoup的官方中文文件為:
API為:
java程式碼第13行:
從文件中我們可用看出,獲取資料來源的方法有三:
(1)從一段html程式碼字串獲取: Document doc = Jsoup.parse(html);
(2)從一個url獲取: Document doc = Jsoup.connect("").get();
(3)從一個html檔案獲取 File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "");
這裡,我們採取了第二種方法,從url中獲取。
java程式碼第24、26、30、34、38行:
Document 繼承自 Element 類, 而Element類有一個很好的方法,叫select , 這個選擇器幾乎無所不能。快速從一堆html程式碼中獲取我們想要的一段,我覺得使用select最方便。下面我們來看怎麼使用select方法來查詢。
注:以下表格的結果都是使用以下語句列印出來的
for(Element e : elements) {
System.out.println(e.text());
}
select詳解
描述 測試的HTML程式碼 select寫法
結果
透過
標籤名
來查詢
33
25
Elements elements = doc.select("span");
注:透過標籤來查詢,直接寫 "標籤名" 就好,不需要尖括號。
33
25
透過
id
來查詢
36
20
Elements elements = doc.select("#mySpan");
注:透過id來查詢,使用方法跟css指定元素一樣,用#
36
透過
class名
來查詢
36
20
Elements elements = doc.select(".myClass");
注:透過id來查詢,使用方法跟css指定元素一樣,用 .
36
利用標籤內
屬性名
查詢元素
36
36
Elements elements = doc.select("span[class=class1]span[id=id1]");
注:規則為 標籤名【屬性名=屬性值】,標籤名可寫可不寫,多個屬性即多個【】,如上。
36
利用標籤內
屬性名字首
查詢元素
36
22
Elements elements = doc.select("span[^cl]");
注:規則為 標籤名【^屬性名字首】,標籤名可寫可不寫,多個屬性即多個【】。
36
22
利用標籤內
屬性名+正規表示式
查詢元素
36
22
Elements elements = doc.select("span[class~=^AB]");
注:規則為 標籤名【屬性名~=正規表示式】,以上的正規表示式的意思是查詢以class值以AB為開頭的標籤,標籤名可寫可不寫,多個屬性即多個【】
36
利用標籤
文字包含某些內容
來查詢
36
22
Elements elements = doc.select("span:contains(3)");
注:規則為 標籤名:contains(文字值)
36
利用標籤
文字包含某些內容+正規表示式
來查詢
36
22
Elements elements = doc.select("span:matchesOwn(^3)");
注:規則為 標籤名:matchesOwn(正規表示式),以上的正則表式的意思是以文字值以3為開頭的標籤
36
關於select,還有一些其他的查詢方法,以上只列出個人覺得比較好用、常用的語法。
select方法返回的是一個Elements 物件,裡面包含著找到的所有節點。遍歷Elements ,透過get(index),就可以拿出具體的 節點了。透過節點的text()方法,就可用拿出文字值。
而想得到節點的其他屬性,可以看API的介紹。
出處:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1693161/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java培訓教程之使用Jsoup實現簡單的爬蟲技術JavaJS爬蟲
- 爬蟲系列 | 6、詳解爬蟲中BeautifulSoup4的用法爬蟲
- Java爬蟲利器HTML解析工具-JsoupJava爬蟲HTMLJS
- Java爬蟲系列三:使用Jsoup解析HTMLJava爬蟲JSHTML
- 簡單例子展示爬蟲在不同思想下的寫法單例爬蟲
- java簡單的爬蟲(今日頭條)Java爬蟲
- 爬蟲專案(一)爬蟲+jsoup輕鬆爬知乎爬蟲JS
- java爬蟲入門--用jsoup爬取汽車之家的新聞Java爬蟲JS
- 簡單瞭解python爬蟲Python爬蟲
- 簡單的爬蟲程式爬蟲
- Java學習-簡單爬蟲系統Java爬蟲
- python爬蟲:爬蟲的簡單介紹及requests模組的簡單使用Python爬蟲
- [網路爬蟲] Jsoup : HTML 解析工具爬蟲JSHTML
- struts2.01用法的簡單例子單例
- java實現一個簡單的爬蟲小程式Java爬蟲
- 爬蟲學習之一個簡單的網路爬蟲爬蟲
- 簡單的Python爬蟲 就是這麼簡單Python爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- python簡單爬蟲(二)Python爬蟲
- Django model select的各種用法詳解Django
- jsoup爬蟲技術+druid連線池JS爬蟲UI
- Python爬蟲學習(5): 簡單的爬取Python爬蟲
- 爬蟲--Scrapy簡易爬蟲爬蟲
- 爬蟲(14) - Scrapy-Redis分散式爬蟲(1) | 詳解爬蟲Redis分散式
- Python簡單爬蟲專案Python爬蟲
- 簡單網路爬蟲Ruby版爬蟲
- AngularJS select中ngOptions用法詳解AngularJSGo
- 情況最簡單下的爬蟲案例爬蟲
- Python代理IP爬蟲的簡單使用Python爬蟲
- nodeJS做一個簡單的爬蟲NodeJS爬蟲
- 一個簡單的python爬蟲程式Python爬蟲
- Jsoup + HtmlUtil 實現網易新聞網頁爬蟲JSHTML網頁爬蟲
- 爬蟲實踐-基於Jsoup爬取Facebook群組成員資訊爬蟲JS
- 開源JAVA單機爬蟲框架簡介,優缺點分析Java爬蟲框架
- 運用node實現簡單爬蟲爬蟲
- 爬蟲-BeautifulSoup簡單分析和學習爬蟲
- 用PYTHON爬蟲簡單爬取網路小說Python爬蟲
- Laravel 手動搭建簡單的資料爬蟲Laravel爬蟲