爬虫定义:
网络爬虫(又被称为网页蜘蛛,网络机器人,扒虫),网络爬虫是一个自动提取网页的程序,它按照一定的规则,自动地抓取网页信息的程序或者脚本。它根据既定的抓取目标,有选择的访问网页与相关的链接,获取所需要的信息。
爬虫的目标:
一般来讲,爬虫的目标就是抓取某个网站或者某个应用的我们所需要的内容并成功提取。这些内容一般分为两部分,非结构化的文本,或结构化的文本。
对于非结构化的文本
HTML文本基本上是传统爬虫过程中最常见的,也就是大多数时候会遇到的情况,例如抓取一个网页,得到的是HTML,然后需要解析一些常见的元素,提取一些关键的信息。HTML其实理应属于结构化的文本组织,但是又因为一般我们需要的关键信息并非直接可以得到,需要进行对HTML的解析查找,甚至一些字符串操作才能得到,所以还是归类于非结构化的数据处理中。常见解析方式如下
CSS选择器
现在的网页样式比较多,所以一般的网页都会有一些CSS的定位,例如class,id等等,或者我们根据常见的节点路径进行定位。
这里id就为finance,我们用css选择器,就是"#finance"就得到了财经这一块区域的html,同理,可以根据特定的css选择器可以获取其他的内容。
XPATH
XPATH是一种页面元素的路径选择方法,利用Chrome可以快速得到,如:
copy XPATH 就能得到——//*[@id="finance"]
正则表达式
正则表达式,用标准正则解析,一般会把HTML当做普通文本,用指定格式匹配当相关文本,适合小片段文本,或者某一串字符,或者HTML包含javascript的代码,无法用CSS选择器或者XPATH。
字符串分隔
同正则表达式,更为偷懒的方法,也比较简单,使用需谨慎,考虑的要更为周全。如果对于页面间区别较大的元素或内容,不介意使用。
二.对于结构化的文本
对于结构化的文本
结构化的数据是最好处理,一般都是类似JSON格式的字符串,直接解析JSON数据就可以了,提取JSON的关键字段即可。
爬虫的工作原理及基本流程:
工作原理
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
基本流程
1.首先选取一部分精心挑选的种子URL;
2.将这些URL放入待抓取URL队列;
3.从待抓取URL队列中取出待抓取在URL,并将URL对应的网页下载下来。
4.分析已抓取URL对应的网页内容,并等待进入下一个循环。
常见爬虫框架:
分布式爬虫:Apache的Nutch,Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。
JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
非JAVA单机爬虫:scrapy、pyspider
常见爬虫类型:
根据不同的应用,爬虫系统在许多方面存在差异,大体而言,可以将爬虫划分为如下三种类型
1. 批量型爬虫(Batch Crawler):批量型爬虫有比较明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程。至于具体目标可能各异,也许是设定抓取一定数量的网页即可,也许是设定抓取消耗的时间等。
2.增量型爬虫(Incremental Crawler):增量型爬虫与批量型爬虫不同,他没有设定的目标,因此在抓取完所有的数据前会处在一个持续不断的抓取过程中,一般适用于大型的搜索引擎。
3.垂直型爬虫(Focused Crawter):简单的可以理解为一个无限细化的增量网络爬虫,可以细致的对诸如行业、内容、发布时间、页面大小等很多因素进行筛选。