在互联网普及的现今社会,网络数据信息对人们的帮助越来越大,减少了之前通过报纸,杂志,电视,广播,书籍等等获取信息的方式,爬虫信息就变成了一种获取信息的渠道。
网页和普通文档的基本区别就是:它存在超级链接。需要的信息往往通过链接指向网页中,超链接标签为下面所示:
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
<a href="网址信息url"></a>
</pre>
某新闻网网页截图:
image如上图所示,某新闻网站,其中需要的文本信息就是用a标签包裹起来的超级链接。
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
<a href="http://www.herbert.com/life/2019/01-03/8719330.shtml" target="_blank">十大网红城市兰州排名第六</a>
</pre>
对于这种超链接,我们可以使用正则表达式提取文本信息,但是复杂的正则表达式可读性不好。另一种还可以使用专用的HTML解析器来实现提取网址信息
下面简单我们写一个提取超链接的代码块
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
String url ="http://www.herbert.com/";
//解析的对象就是一个文档信息
Document document =Jsoup.connect(url).get();
Elements elements = doc.select("a[href]");
//循环遍历每一个超链接
for(Element el : elements){
//得到href属性中的值,也就是超链接的地址信息
String elHref = el.attr("href");
System.out.println(elHref);
}
</pre>
目前已经拿到每一个超链接的地址信息了,就可以采集超链接对应的文档信息。
现在我们采集信心详情页,也就是超级链接对应的文档信息
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
Document doc = Jsoup.connect("http://www.herbert.com/life/2019/01-03/8719330.shtml").get();
//获取网页源码信息
System.out.pritnln(doc.html());
</pre>
这里Document对象就是DOM树的根节点。然后去取想要的每一个节点的信息。
现在采集标题,在此,标题是下面代码信息
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
<h1 style="display:block; position:relative; text-align:center; clear:both">
十大网红城市兰州排名第六
</h1>
</pre>
image获取标题中的内容
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
Elements es = doc.select("h1");
//如果没有找到h1标签就返回
if (es.first() == null){
return;
}
//获取h1标签的内容
String title = es.get(0).text();
System.out.println(title);
</pre>
另外还有获取HTML中Class和Id选择器的一些方法,比如有下面的一个节点
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
<p id="red">这个段落是红色。</p>
</pre>
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
<h1 class="center">
This heading will be center-aligned
</h1>
</pre>
这种形式的可以通过下面代码获取
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
Elements es = document.getElementsByClass("center");
Element content = document.getElementById("red");
</pre>
对于某些特定的网站可以通过请求接口直接获取数据,并对JSON串进行解析,得到数据。
另外有一些网站信息的url地址是通过递增的方式形成的,比如:
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
http://www.herbert.com/page/index.shtml
http://www.herbert.com/page/index_1.shtml
http://www.herbert.com/page/index_2.shtml
http://www.herbert.com/page/index_3.shtml
</pre>
<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background: none;">
http://www.herbert.com/page/0000001
http://www.herbert.com/page/0000001/2
http://www.herbert.com/page/0000001/3
http://www.herbert.com/page/0000001/4
</pre>
猜你喜欢
往期精选
❶
♡ 大 · 家 · 都 · 爱 ♡
▼
SpringBoot + Dubbo + Mybatis 分层实现分布式服务
image1.jpg
网友评论