一,初識jsoup
jsoup 是一款 Java 的HTML 解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作數據,可以看作是java版的jQuery。
1. 獲取數據源的方法:Document doc = Jsonp.connect("https://xxxxxx").get();
2.Document 繼承Element 類, 而Element類有個很好的方法select ,select 選擇器幾乎無所不能(百度: jsoup select 學習更多選擇器)。
<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 id="mySpan" title="無持續風向" class="">無持續風向</span>
<span title="無持續風向" class=""></span>
</em>
<i>微風</i>
</p>
<div class="slid">22</div>
</li>
a. 通過標籤名稱進行查找:Elements elements = doc.select("h1");
b.通過 id 進行查找:Elements elements = doc.select("#mySpan");
c.通過 class 名稱進行查找:Elements elements = doc.select(".slid");
二,demo 獲取新聞內容
1.引入jar包:jsoup-1.6.1.jar。
2.按f12,目標網頁分析確定需要爬取的數據使用哪些選擇器獲取到數據,對自己要爬的數據的標籤要熟悉。
package com.puboot.common.util;
import java.io.IOException;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JsoupUtils {
/**
*
* @param url 訪問路徑
* @return
*/
public Document getDocument (String url){
try {
//通過Jsoup獲取資源,5000是設置連接超時時間,單位ms
return Jsoup.connect(url).timeout(5000).get();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
JsoupUtils t = new JsoupUtils();
Document doc = t.getDocument("https://baijiahao.baidu.com/s?id=1667756469242968479&wfr=spider&for=pc");
//文章標題
Elements elements1 = doc.select(".article-title");//通過 class名稱進行查找,獲取標題標籤
System.out.println("文章標題: "+elements1.text());//從標籤中獲取標題
//文章內容
Elements elements2 = doc.select(".article-content");
Elements elements3 = elements2.select(".bjh-p");
System.out.println("文章內容: "+elements3.html());
//圖片
Elements elements4 = doc.select(".large");
List<String> eachAttr = elements4.eachAttr("src");
for(int i=0; i<eachAttr.size();i++) {
System.out.println("圖片連接"+i+":"+eachAttr.get(i));
}
//文章來源
Elements elements5 = doc.select(".author-name");
System.out.println("文章來源: "+elements5.html());
//發佈時間
Elements elements6 = doc.select(".date");
Elements elements7 = doc.select(".time");
System.out.println(elements6.html()+" "+elements7.html());
}
}
不同的模板解析不同,根據具體需求解析。