一,初识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());
}
}
不同的模板解析不同,根据具体需求解析。