Java資料採集--2.使用Jsoup抓取開源中國
本節使用Jsoup獲取網頁原始碼,並且解析資料。
使用JSoup 解析網頁,語法使用 JS,css,Jquery 選擇器語法,方便易懂
抓取網站:http://www.oschina.net/news/list 開源中國-新聞資訊模組
基本工作:
1.建立好Java工程,包等基本工作。
2.匯入Jsoup所依賴的jar包。官網下載地址如下:
http://jsoup.org/packages/jsoup-1.8.1.jar
3.建立JsoupDemo類。(類名自己隨意,java基礎,沒必要多說吧)
核心內容
1.在main函式中使用Jsoup獲取網頁原始碼
String url = "http://www.oschina.net/news/list";
Document document = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0")
.get();
此段程式碼意思為使用Jsoup連結url地址,並且返回封裝該網頁的html原始碼的Document樹,userAgent為模擬瀏覽器頭,get為使用get方式提交,關於connect的引數還有很多,請自行檢視API學習。
2.分析網頁原始碼
在目標網頁上點選右鍵,火狐有使用FireBug檢視元素,谷歌有審查元素,然後可以看到相應的原始碼和網頁的對應情況。如下圖(以後都以谷歌瀏覽器為例):
可以看到我們所需要的資料都在
id="RecentNewsList "
的div下的class="List"
的ul下,並且每一條都對應一個li標籤,那麼我們只需要找到class=”List”的ul,並且遍歷它的li標籤就可以獲取到所有的資訊的原始碼。程式碼如下:Elements elements = document.select("#RecentNewsList .List > li");
這裡說一下常用的選擇器:
**#RecentNewsList 代表選擇id="RecentNewsList "
的標籤 #為id選擇器
.List 代表選擇class="List"
的標籤 .為class選擇器
li 表示li標籤
‘>’ 只能選擇子標籤,直接為父元素後代的直系子元素,比如兒子,孫子關係,只能選擇兒子。下一級的。**
select中可以寫多個,注意使用空格隔開,也可以連續使用select。
3.遍歷操作元素集(Elements)
for (Element element : elements) {
Elements titleElement = element.select("h2 a");
String title = titleElement.text();
String link = titleElement.attr("href").trim();
Elements dataElement = element.select(".date");
Elements autherElement = dataElement.select("a");
String auther = autherElement.text();
autherElement.remove();
String date = dataElement.text();
String detail = element.select(".detail").text();
System.out.println("連結: " + "http://www.oschina.net"+link);
System.out.println("標題: " + title);
System.out.println("作者: " + auther);
System.out.println("釋出時間: " + date);
System.out.println("詳細資訊: " + detail);
System.out.println();
System.out.println();
}
程式執行結果如下:
也可以輸出元素集的長度System.out.println(elements.size());
完整程式碼如下:
package demo;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* 使用JSoup 解析網頁,語法使用 JS,css,Jquery 選擇器語法,方便易懂
*
* Jsoup教程網:http://www.open-open.com/jsoup/
*
* @author geekfly
*
*/
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String url = "http://www.oschina.net/news/list";
Document document = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0")
.get();
Elements elements = document.select("#RecentNewsList .List > li");
for (Element element : elements) {
Elements titleElement = element.select("h2 a");
String title = titleElement.text();
String link = titleElement.attr("href").trim();
Elements dataElement = element.select(".date");
Elements autherElement = dataElement.select("a");
String auther = autherElement.text();
autherElement.remove();
String date = dataElement.text();
String detail = element.select(".detail").text();
System.out.println("連結: " + "http://www.oschina.net"+link);
System.out.println("標題: " + title);
System.out.println("作者: " + auther);
System.out.println("釋出時間: " + date);
System.out.println("詳細資訊: " + detail);
System.out.println();
System.out.println();
}
System.out.println(elements.size());
}
}