c爬虫抓取网页数据(网络爬虫的基本工作流程:1.的发展基本流程)
优采云 发布时间: 2022-02-26 00:31c爬虫抓取网页数据(网络爬虫的基本工作流程:1.的发展基本流程)
下面是一个很励志的文章先跟大家分享。
信息论的发展
通过上一篇文章了解了爬虫的具体工作后,我们分析了网络爬虫的基本工作流程如下:
1.首先选择一个精心挑选的*敏*感*词* URL 的子集;
2.将这些网址放入待抓取的网址队列中;
3. 从待爬取URL队列中取出待爬取的URL,解析DNS,获取主机IP,下载该URL对应的网页,存入下载的网页库中。此外,将这些 URL 放入 Crawl URL 队列。
4.分析已经爬取的URL队列中的URL,分析其中的其他URL,将这些URL放入待爬取的URL队列中,从而进入下一个循环。
一、爬虫设计
从爬虫的角度来划分互联网,互联网的所有页面可以分为五个部分:
1.已下载未过期网页
2.下载和过期网页:抓取的网页实际上是互联网内容的镜像和备份。互联网是动态变化的,互联网上的一些内容也发生了变化。您访问的页面已过期。
3.待下载网页:URL队列中待抓取的网页
4. 已知网页:没有被爬取过,也不在待爬取的URL队列中,但是通过分析已经爬取过的页面得到的URL或者待爬取的URL对应的页面可以视为已知网页。
5.还有一些网页是爬虫无法直接爬取下载的。称为不可知网页。
我们爬虫项目的主要事件流程大致如下:
1.获取命令行参数并执行相应操作
2.读取配置文件并解析得到各种设置
3.加载各种模块
4.*敏*感*词*入队,启动DNS解析线程(原队列不为空时解析)
5.创建epoll,启动任务,发起请求等,关注事件
6.在大循环中使用epoll_wait返回活动事件的同时,每个事件都会启动一个线程进行处理(该线程主要是解析页面、保存页面、url处理等),当线程结束。(或者程序初始化的时候创建线程池,没有任务的时候阻塞线程,通过pthread_cond_signal唤醒休眠队列中的线程,但是一个页面分析出来的有效URL会很多。这个时候我们甚至队列满时需要阻塞分析页面.url线程,使用线程池的好处是减少线程创建和销毁的系统开销)
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。下面重点介绍几种常见的爬取策略(关于爬取策略优劣分析的建议,请阅读吴军老师《数学之美》第9章和第10章):
1.深度优先遍历策略
深度优先遍历策略是指网络爬虫会从起始页开始,每次一个链接跟踪每个链接,处理完该行后移动到下一个起始页,并继续跟踪该链接。
2.广度优先遍历策略
广度优先遍历策略的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。或者以上图为例:
3.反向链接计数策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
4.部分PageRank策略
Partial PageRank算法借鉴了PageRank算法的思想:对于下载的网页,与待爬取的URL队列中的URL一起,形成一组网页,计算每个页面的PageRank值. URL 按 PageRank 值排序,并按该顺序抓取页面。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,会给这些页面一个临时的PageRank值(比如1):总结这个页面所有传入链接传入的PageRank值(其实就是重复的大矩阵运算,未知站点的PageRank值会逐渐收敛到合适的值。说实话,收敛是我认为这个算法最漂亮的部分),从而形成了未知页面的PageRank值,
5.OPIC 政策政策
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始*敏*感*词*。当某个页面P被下载时,P的*敏*感*词*分配给从P分析的所有链接,P的*敏*感*词*被清空。根据*敏*感*词*数量对待爬取URL队列中的所有页面进行排序。
6.大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
在下面