Java技术分享Java 杂谈

【爬虫】网络爬虫入门获取信息

2019-01-07  本文已影响4人  墨迹嘿嘿
image

在互联网普及的现今社会,网络数据信息对人们的帮助越来越大,减少了之前通过报纸,杂志,电视,广播,书籍等等获取信息的方式,爬虫信息就变成了一种获取信息的渠道。

网页和普通文档的基本区别就是:它存在超级链接。需要的信息往往通过链接指向网页中,超链接标签为下面所示:

<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>

猜你喜欢
往期精选

【爬虫】数据结构实现折半查找的算法

【爬虫】Java基本技术一览表

♡ 大 · 家 · 都 · 爱 ♡

SpringBoot + Redis 实现缓存机制

SpringBoot + Dubbo + Mybatis 分层实现分布式服务

SpringBoot 整合Dubbo构建分布式服务

任务调度框架梳理 -基于Quartz

image
1.jpg
上一篇 下一篇

猜你喜欢

热点阅读