教你用Java手动写一个简单的网络爬虫
“爬虫”这个词大家经常听到,但它是什么意思?又是用来做什么的呢?下面就分享一下关于网络爬虫的入门知识。
0 1
网络爬虫
1.1. 名称
网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。
另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
1.2. 简述
网络爬虫是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。
如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
所以要想抓取网络上的数据,不仅需要爬虫程序还需要一个可以接受”爬虫“发回的数据并进行处理过滤的服务器,爬虫抓取的数据量越大,对服务器的性能要求则越高。
0 2
流程
网络爬虫是做什么的? 他的主要工作就是跟据指定的url地址去发送请求,获得响应, 然后解析响应 , 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径,然后继续访问,继续解析;继续查找需要的数据和继续解析出新的URL路径 。
这就是网络爬虫主要干的工作. 下面是流程图:
通过上面的流程图能大概了解到网络爬虫干了哪些活 ,根据这些也就能设计出一个简单的网络爬虫出来。
一个简单的爬虫必需的功能包括:
发送请求和获取响应的功能 ;
解析响应的功能 ;
对过滤出的数据进行存储的功能 ;
对解析出来的URL路径处理的功能 ;
2.1. 关注点
爬虫需要关注的三个点:
对抓取目标的描述或定义;
对网页或数据的分析与过滤;
对URL的搜索策略。
0 3
分类
网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:
通用网络爬虫(General Purpose Web Crawler)
聚焦网络爬虫(Focused Web Crawler)
增量式网络爬虫(Incremental Web Crawler)
深层网络爬虫(Deep Web Crawler)。
实际的网络爬虫系统通常是几种爬虫技术相结合实现的。
0 4
思路分析
下面我用我们的官网将跟大家一起来分析下如何实现这样的一个爬虫:
首先观察我们爬虫的起始页面是:http://www.wanho.net/a/jyxb/
分析页面:
所有的喜报信息的URL用XPath表达式来表示就是://div[@class='main_l']/ul/li
相关数据:
标题:用XPath表达式来表示 //div[@class='content']/h4/a/text()
描述:用XPath表达式来表示//div[@class='content']/p/text()
图片:用XPath表达式来表示 //a/img/@src
好了,我们上面已经将在代码中需要获取的关键信息的XPath表达式都找到了,接下来就可以正式写代码来实现了
0 5
代码实现
代码实现部分采用webmagic框架,因为这样比使用基本的的Java网络编程要简单得多。
5.1. 代码结构
5.2. 程序入口
Demo.java
5.3. 爬取过程
WanhoPageProcessor.java
5.4. 结果保存
WanhoPipeline.java
5.5. 模型对象
ArticleVo.java