Java 爬虫系列丨(一)爬虫介绍


1. 简介

1.1 背景

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

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

Java 爬虫系列丨(一)爬虫介绍

1.2 什么是网络爬虫

网络爬虫(Web Crawler),又称为网络蜘蛛(Web Spider)或 Web 信息采集器,是一种按照一定规则,自动抓取或下载网络信息的计算机程序或自动化脚本。

狭义上理解:

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

功能上理解:

确定待爬的 URL 队列,获取每个 URL 对应的网页内容(如 HTML/JSON),解析网页内容,并存储对应的数据。

本质:

网络爬虫实际上是通过模拟浏览器的方式获取服务器数据。

Java 爬虫系列丨(一)爬虫介绍

1.3 网路爬虫的作用

  1. 可以实现搜索引擎

    我们学会了爬虫编写之后,就可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在采集回来的信息中进行检索,即实现了私人的搜索引擎。

  2. 大数据时代,可以让我们获取更多的数据源

    在进行大数据分析或者进行数据挖掘的时候,需要有数据源进行分析。我们可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大。此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,再进行更深层次的数据分析,并获得更多有价值的信息。如研究产品个性化推荐、文本挖掘、用户行为模式挖掘等。

  3. 可以更好地进行搜索引擎优化(SEO)

    对于很多SEO从业者来说,为了更好的完成工作,那么就必须要对搜索引擎的工作原理非常清楚,同时也需要掌握搜索引擎爬虫的工作原理。而学习爬虫,可以更深层次地理解搜索引擎爬虫的工作原理,这样在进行搜索引擎优化时,才能知己知彼,百战不殆。

1.4 网络爬虫的分类

1.4.1 通用网络爬虫

通用网络爬虫(General Purpose Web Crawler)是指爬行对象从一些种子 URL 扩充到整个 Web,主要为门户站点搜索引擎和大型 Web 服务提供商采集数据。通用网络爬虫的爬取范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求较低,通常采用并行工作方式,有较强的应用价值。

1.4.2 聚焦网络爬虫

聚焦网络爬虫(Focused Web Crawler)又称为主题网络爬虫:是指选择性地爬行那些与预先定义好的主题相关的页面。和通用爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,可以很好地满足一些特定人群对特定领域信息的需求。通常在设计聚焦网络爬虫时,需要加入链接和内容筛选模块。

一个常见的案例是基于关键字获取符合用户需求的数据,如下图所示:

Java 爬虫系列丨(一)爬虫介绍

1.4.3 增量网络爬虫

增量网络爬虫(Incremental Web Crawler)对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面,历史已经采集过的页面不重复采集。增量网络爬虫避免了重复采集数据,可以减小时间和空间上的耗费。通常在设计网络爬虫时,需要在数据库中,加入时间戳,基于时间戳上的先后,判断程序是否继续执行。

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

Java 爬虫系列丨(一)爬虫介绍

1.4.4 深层网络爬虫

深层网络爬虫(Deep Web Crawler)指大部分内容不能通过静态链接获取,只有用户提交一些表单信息才能获取的 Web 页面。例如,需要模拟登陆的网络爬虫便属于这类网络爬虫。

另外,还有一些需要用户提交关键词才能获取的内容,如京东淘宝提交关键字、价格区间获取产品的相关信息。

Java 爬虫系列丨(一)爬虫介绍

2. 流程

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

Java 爬虫系列丨(一)爬虫介绍

具体流程为:

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

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

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

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

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

3. 策略

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

3.1 深度优先搜索策略

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

Java 爬虫系列丨(一)爬虫介绍

3.2 广度优先搜索策略

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

Java 爬虫系列丨(一)爬虫介绍

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

相关文章:

  • 2021-06-09
  • 2021-08-28
  • 2021-04-02
猜你喜欢
  • 2021-11-02
  • 2021-07-12
  • 2021-11-15
  • 2021-06-15
  • 2021-07-20
相关资源
相似解决方案