网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。

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

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

1.首先选取一部分精心挑选的种子URL;

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

3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

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

从爬虫的角度对互联网进行划分,可以将互联网的所有页面分为五个部分:

1.已下载未过期网页

2.已下载已过期网页:抓取到的网页实际上是互联网内容的一个镜像与备份,互联网是动态变化的,一部分互联网上的内容已经发生了变化,这时,这部分抓取到的网页就已经过期了。

3.待下载网页:也就是待抓取URL队列中的那些页面

4.可知网页:还没有抓取下来,也没有在待抓取URL队列中,但是可以通过对已抓取页面或者待抓取URL对应页面进行分析获取到的URL,认为是可知网页。

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

抓取策略:

在爬虫系统中,待抓取URL队列是很重要的一部分。待抓取URL队列中的URL以什么样的顺序排列也是一个很重要的问题,因为这涉及到先抓取那个页面,后抓取哪个页面。而决定这些URL排列顺序的方法,叫做抓取策略。下面重点介绍几种常见的抓取策略:

1.深度优先遍历策略

深度优先遍历策略是指网络爬虫会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们以下面的图为例:

遍历的路径:A-F-G  E-H-I B C D

2.广度优先遍历策略

广度优先遍历策略的基本思路是,将新下载网页中发现的链接直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。还是以上面的图为例:

遍历路径:A-B-C-D-E-FG H I

3.反向链接数策略

反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。

在真实的网络环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那个也的重要程度。因此,搜索引擎往往考虑一些可靠的反向链接数。

4.Partial PageRank策略

Partial PageRank算法借鉴了PageRank算法的思想:对于已经下载的网页,连同待抓取URL队列中的URL,形成网页集合,计算每个页面的PageRank值,计算完之后,将待抓取URL队列中的URL按照PageRank值的大小排列,并按照该顺序抓取页面。

如果每次抓取一个页面,就重新计算PageRank值,一种折中方案是:每抓取K个页面后,重新计算一次PageRank值。但是这种情况还会有一个问题:对于已经下载下来的页面中分析出的链接,也就是我们之前提到的未知网页那一部分,暂时是没有PageRank值的。为了解决这个问题,会给这些页面一个临时的PageRank值:将这个网页所有入链传递进来的PageRank值进行汇总,这样就形成了该未知页面的PageRank值,从而参与排序。

5.OPIC策略策略

该算法实际上也是对页面进行一个重要性打分。在算法开始前,给所有页面一个相同的初始现金(cash)。当下载了某个页面P之后,将P的现金分摊给所有从P中分析出的链接,并且将P的现金清空。对于待抓取URL队列中的所有页面按照现金数进行排序。

6.大站优先策略

对于待抓取URL队列中的所有网页,根据所属的网站进行分类。对于待下载页面数多的网站,优先下载。这个策略也因此叫做大站优先策略。

转载于:https://www.cnblogs.com/niulanshan/p/6174799.html

Linux企业级项目实践之网络爬虫(2)——网络爬虫的结构与工作流程相关推荐

  1. Linux企业级项目实践之网络爬虫(28)——爬虫socket处理

    Socket是进程之间交换数据的机制.这些进程即可以是同一台机器上的,也可以是通过网络连接起来的不同机器.一旦一个Socket连接建立,那么数据就能够双向传输,直到其中一端关闭连接. 通常,请求数据的 ...

  2. Linux企业级项目实践之网络爬虫(29)——遵守robots.txt

    Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以 ...

  3. OpenStack 网络总结之:理解GRE隧道的工作流程

    源文档 <http://openstack.redhat.com/Networking_in_too_much_detail> 文章背景 Openstack的网络配置复杂多样,本文讲述的流 ...

  4. 网络记账软件测试面试,超级账本test-network测试工作流程

    一.启动测试网络 1.进入test-network目录 cd fabric-samples/test-network 2.在test-network目录中,运行以下命令删除先前运行的所有容器或工程 . ...

  5. Linux 企业级安全原理和防范技巧

    Linux 企业级安全原理和防范技巧 1. 企业级Linux系统防护概述 1.1 企业级Linux系统安全威胁 1.2 企业级Linux系统安全立体式防范体系 1.2.1 Linux文件系统访问安全 ...

  6. matlab 爬虫 例子,认识爬虫(示例代码)

    爬虫分为两种: 1.通用爬虫. 2.聚焦爬虫. 通用爬虫:搜索引擎用的爬虫系统. 一.目标:爬取所有网站的网页下载下来,存放到本地服务器里形成备份. 二.抓取流程: a.首选选取一部分已有的url,把 ...

  7. python网络爬虫从入门到实践第2版pdf-Python网络爬虫从入门到实践 第2版

    前言 第1章 网络爬虫入门1 1.1 为什么要学网络爬虫2 1.1.1 网络爬虫能带来什么好处2 1.1.2 能从网络上爬取什么数据3 1.1.3 应不应该学爬虫3 1.2 网络爬虫是否合法3 1.2 ...

  8. ThinkPad物理机安装Linux系统实战企业级项目之CentOS安装

    ThinkPad物理机安装Linux系统实战企业级项目之CentOS安装 系统安装 下载CentOS系统制作系统U盘 笔记本电源设置 网络设置 WiFi类型查看验证设置联网 设置固定IP 安装MySQ ...

  9. python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战

    ● 案例完整 本书中的所有案例都是通过"理论讲解 + 环境搭建 + 完整代码及分析 + 运行结果"这种完善的结构进行讲解的.此外,复杂的案例配有项目结构图,有难度的案例还分析了底层 ...

最新文章

  1. 替换不文明词语和非法字符
  2. linux ce mysql安装_Linux 安装 MySQL 8.0
  3. node 后台重定向_登录后重定向到用户原本要访问的页面《 Node.js 应用:重构与改进 #3 》...
  4. Java定时任务原理
  5. Unity中实现表格功能
  6. 使用gsds绘制基因结构图_GSDS 基因结构显示系统
  7. 为什么电脑桌面无计算机图标,我的电脑桌面图标都没名字了为什么
  8. 【剖析 | SOFARPC 框架】系列之SOFARPC序列化比较
  9. 吐血整理 | 肝翻 Linux 同步管理所有知识点
  10. 2022年山东省熔化焊接与热切割作业(特种上岗操作证)模拟试题及答案
  11. cat5e跑万兆_全网最标准的万兆网线测试!超五类到底能不能跑万兆?
  12. 熊kong作品资源链接_Kong雀技术:向世界展示您的设计作品
  13. 四极管:WaitForMultipleObjects的疑惑
  14. c语言中 hr是什么字符,Heat Treatment  的缩写(HR)C
  15. 886n虚拟服务器,TP-Link TL-WR886N V4路由器端口映射怎么设置
  16. 二、物流系统|2.1物流系统的概念
  17. IE高级技巧不完全手册
  18. web页面PC端和移动端的区别有哪些?
  19. Oracle SQL调优系列之no_unnest和unnest用法简介
  20. 文件(图片,音频)上传OSS并返回上传地址

热门文章

  1. php两个字符串怎么比较,php比较两个字符串的函数strcasecmp()
  2. spring 常用注解汇总
  3. python中绝对角度是什么意思_Python中的角度转换功能
  4. 阿里云天池 零基础入门NLP - 新闻文本分类 2种做法,F1=0.87
  5. 【w3cschool】Linux命令简单复习
  6. 2021牛客暑期多校训练营6,签到题CFHI
  7. 【POJ3461】Oulipo(字符串Hash)
  8. 【POJ1328】Radar Installation(贪心,决策包容)
  9. 排列:计算1!+2*2!+3*3!+...+n*n!
  10. JAVA集合一:ArrayList和LinkedList