网页抓取工具(一个通用的网络爬虫的基本工作流程:网络)

优采云 发布时间: 2022-02-19 18:21

  网页抓取工具(一个通用的网络爬虫的基本工作流程:网络)

  网络爬虫是搜索引擎爬虫系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地,形成网络内容的镜像备份。本篇博客主要对爬虫和爬虫系统进行简要概述。

  一、网络爬虫的基本结构和工作流程

  一个通用网络爬虫的框架如图所示:

  网络爬虫的基本工作流程如下:

  1.首先选择一个精心挑选的*敏*感*词* URL 的子集;

  2.将这些URL放入待抓取的URL队列中;

  3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。

  4.分析已经爬取的URL队列中的URL,分析其中的其他URL,将URL放入待爬取的URL队列,从而进入下一个循环。

  二、从爬虫的角度划分互联网

  相应地,互联网上的所有页面可以分为五个部分:

  1.已下载未过期网页

  2.已下载和过期网页:抓取的网页实际上是互联网内容的镜像和备份。互联网是动态变化的,互联网上的一些内容也发生了变化。此时,这部分爬取的你访问的页面已经过期。

  3.待下载页面:URL队列中待抓取的页面

  4. 已知网页:尚未被爬取,也不在待爬取的URL队列中,但考虑分析已爬取的页面得到的URL或待爬取URL对应的页面成为一个已知的网页。

  5.还有一些网页是爬虫无法直接爬取下载的。称为不可知网页。

  三、抓取策略

  在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略:

  1.深度优先遍历策略

  深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。我们以下图为例:

  遍历的路径:AFG EHI BCD

  2.广度优先遍历策略

  广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:

  遍历路径:ABCDEF GHI

  3.反向链接计数策略

  反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。

  在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。

  4.部分PageRank策略

  Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。

  如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,会给这些页面一个临时的PageRank值:把这个网页的所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序。以下示例说明:

  5.OPIC 政策政策

  该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始*敏*感*词*。当某个页面P被下载时,P的*敏*感*词*分配给从P分析的所有链接,P的*敏*感*词*被清空。根据*敏*感*词*数量对待爬取URL队列中的所有页面进行排序。

  6.大网站优先策略

  所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。

  四种反爬虫的常用手段

  1 使用不同的用户代理发送请求

  2 使用动态代理

  相信很多人都用代码编写了不同的爬虫程序,在网上获取自己需要的信息,这比手动一个一个地复制要容易。但是,实际上是用一个程序来获取某个网站中的信息。可以知道,在短时间内,这个程序会多次访问某个网站,很多网站都会阻塞这样的情况;例如,只能每隔几分钟进行一次正常访问。这对我们的爬虫来说是个*敏*感*词*烦。我们知道,当我们访问一个网站时,另一台服务器会记录我们电脑的IP地址。有没有办法动态更改我们的 IP 地址?答案是肯定的,那就是使用代理。这样,我们就可以在程序中添加代理功能了。只要对方服务器屏蔽了我们的IP,我们可以使用程序自动更改其他IP地址,这样我们就可以连续访问某台服务器了吗?您可以使用 Java 的 HttpClient 包来添加动态代理功能。

  好了,说了这么多,如何实施方案呢?具体思路是:当我们可以正常访问一个页面(向服务器发送一个HTTP请求)时,服务器一般会返回一个2XX的HTTP响应码给我们。当服务器返回403(禁止访问;当然这个页面正常情况下是可以访问的,正常情况下返回403的代码,就是人家一开始就不让你访问的,我也忍不住。)HTTP对应的代码,我们可以知道服务器在阻塞我们。这时候,当我们的程序检测到返回的403码时,我们可以换一个IP地址,重新请求刚刚被屏蔽的页面。那不会实现动态代码程序吗?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线