网络爬虫原理

引言

随着互联网的迅速发展,网络资源越来越丰富,信息需求者如何从网络中抽取信息变得至关重要。目前,有效的获取网络数据资源的重要方式,便是网络爬虫技术。简单的理解,比如您对百度贴吧的一个帖子内容特别感兴趣,而帖子的回复却有1000多页,这时采用逐条复制的方法便不可行。而采用网络爬虫便可以很轻松地采集到该帖子下的所有内容。

网络爬虫技术最广泛的应用是在搜索引擎中,如百度、Google、Bing 等,它完成了搜索过程中的最关键的步骤,即网页内容的抓取。下图为简单搜索引擎原理图。

网络爬虫原理_第1张图片

网络爬虫的作用,我总结为以下几点:

·舆情分析:企业或政府利用爬虫获取数据,采用数据挖掘的相关方法,发掘用户讨论的内容、实行事件监测、舆情引导等。

·企业对用户分析:企业利用网络爬虫,采集用户对企业或商品的看法、观点以及态度,进而分析用户的需求、自身产品的优劣势、顾客抱怨等等。

·科研工作者的必备技术:现在很多研究都以网络大数据为基础,而采集网络大数据的必备技术便是网络爬虫。利用网络爬虫技术采集的数据可用于研究产品个性化推荐、文本挖掘、用户行为模式挖掘等。

网络的爬虫领域包括:

网络爬虫原理_第2张图片

网络爬虫的基础概念

网络爬虫(Web Crawler),又称为网络蜘蛛(Web Spider)或Web信息采集器,是一种按照一定规则, 自动抓取或下载网络信息计算机程序或自动化脚本,是目前搜索引擎的重要组成部分。

·狭益上理解:利用标准的HTTP协议,根据网络超链接如:(https://www.baidu.com)和web文档检索的方法(如深度优先)遍历万维网信息空间的软件程序。

·功能上理解:确定待爬的URL队列,获取每个URL对应的网页内容(如HTML/JSON),然后在解析网页内容,并存储对应的数据。

 

网络爬虫的分类

网络爬虫按照系统架构和实现技术,大致可以分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。

通用网络爬虫:爬虫对象从一些种子URL扩充到整个web,主要为门户站点搜索引擎和大型web服务提供商采集数据。

通用网络爬虫的爬取范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的数据要求较低,通常采用并行工作方式,有较强的应用价值。

聚焦网络爬虫:又称为主题网络爬虫,是指选择性的爬行那些预先定义好的主题相关的页面。和通用爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大的节省了硬件和网络资源,保存的页面也由于数据少而更新快,可以很好的满足一些特定人群对特定领域的信息的需求。

通常在加入聚集网络爬虫时,需要加入链接和内容筛选模块,一个常见的案例是基于关键字获取符合用户需求的数据,如下图所示:

网络爬虫原理_第3张图片

增量网络爬虫:对已经下载的网页采取增量式更新和只爬行新产生的或者已经发生变化网络的爬虫,它能够在一定程度上保证所爬行的页面尽可能是新页面,历史采集过的页面不重复采集。

增量网络爬虫避免了重复采集数据,可以减小时间和空间上的耗费。通常在设计网络爬虫时,需要在数据库中,加入时间戳,基于时间戳上的先后,判断程序是否继续进行。

常见的案例有:论坛帖子评论数据的采集(如下图所示论坛的帖子,共400多页,每次启动爬虫时,我们只需要爬取最近几天用户所发的帖子)天气数据的采集;新闻数据的采集,股票数据的采集等。

网络爬虫原理_第4张图片

Deep web爬虫:指大部分静态内容不能够通过静态链接获取,只有用户提交一些表单信息才能获取到Web页面。例如,需要模拟登入网络爬虫便属于网络爬虫。另外,还有一些需要用户提交关键词才能够获取的内容,如京东淘宝提交关键字、价格区间获取商品的用户信息。

网络爬虫原理_第5张图片

网络爬虫的流程

网络爬虫基本流程可用下图描述:

网络爬虫原理_第6张图片

具体流程为:

1.需求者选取一部分种子URL(或初始URL),将其放到爬取的队列中。如在java网络爬虫中,可以放入LinkedList或List中。

2.判断URL队列是否为空,如果为空则结束程序的执行,否者执行第三步骤。

3.从待爬取的URL队列中取出爬取的一个URL,获取URL对应的网页内容。在此步骤需要使用相应的状态码(200,403等)判断是否获取数据,如响应成功则执行解释操作,如相应不成功,则将其重新放入待爬取的队列(注意,这里需要移除无效的URL)。

4.针对已经响应成功获取到的数据,执行页面的解析操作。此步骤根据用户的需求获取获取网页内容中的部分数据,如汽车论坛帖子的标题和里面对应的时间等。

5.针对第三步骤已解析的数据,将数据进行存储。

 

网络爬虫的爬行策略

一般的网络爬行策略分为两种:深度优先搜索(Depth-First Search)策略、广度优先搜索(Breadth-First Search)策略。

深度优先搜索策略:从根节点的URL开始的,根据优先级向下遍历该根节点对应的子节点。当访问到某一个节点的URL时,以该子节点为入口,继续向下层遍历,直到没有新的子节点可以继续访问为止。接着使用回溯的方法,找到没有被访问的节点,以类似的方式进行搜索。下图给出了理解深度优先搜索的一个简单的案例:

网络爬虫原理_第7张图片

·广度优先搜索策略:也成为宽度优先,是另外一种非常有效的搜索技术,这种方法按照层进行遍历页面。下面可以帮助理解广度优先搜索遍历的遍历方式:

网络爬虫原理_第8张图片

基于广度优先的爬虫时最简单的爬取网站页面的方法,也是目前最为广泛的方法。

学习建议

网络爬虫是入门某一门编程语言的实战技术:很多学习编程语言(如 Java、Python 或 C++ 等)的同学,采用的方式只看书或在网络上看一些视频,而这将导致的后果就是面对一个具体项目时,不知道如何上手,尤其对新手而言。或者,一段时间后,就将之前的书本内容或视频内容遗忘了。

为此,我建议这些学习者可采用网络爬虫技术入门某一门编程语言(如 Java、Python)。因为爬虫技术是个综合性很强的技术,涉及到编程语言的很多方面。本达人课特别选用了 Java 作为开发语言,将带大家深入了解 Java 网络爬虫背后的核心技术。学完该课程,相信您也已很好地入门 Java 编程语言。

对于零基础入门 Java 网络爬虫的同学,在学习过程中请注意以下几点:

  • 理解爬虫的基本原理。
  • 学习 Java 网络爬虫涉及的基础知识:基础不牢,地动山摇,学习和掌握网络爬虫的基础知识很重要。
  • 吃透基本的爬虫代码,并在此基础上进行改写。
  • 不断实战,发现爬虫中涉及的新问题,并解决问题。

最后,提供一些书籍和资料,给入门以及想深入学习 Java 网络爬虫的读者:

  1. 《Java面向对象程序设计》(耿祥义、张跃平编著),由清华大学出版社出版,这是大学的教材,可作为基础学习。
  2. 《Java核心技术》全2册。
  3. 《Effective Java (3rd Edition)》:目前英文版已是第三版,中文版还在第二版,该书是 Java 进阶必备之书,英文比较好的同学可直接看英文版。
  4. 《自己动手写网络爬虫》(罗刚编著),国内第一本专门讲解 Java 网络爬虫的书籍。

 

你可能感兴趣的:(网络爬虫)