抓取网页数据 php(通用爬虫框架如下图:通用的爬虫框架通用框架流程)
优采云 发布时间: 2022-02-10 23:12抓取网页数据 php(通用爬虫框架如下图:通用的爬虫框架通用框架流程)
2. 搜索引擎爬虫架构
但是浏览器是用户主动操作然后完成HTTP请求,而爬虫需要自动完成HTTP请求,而网络爬虫需要一个整体架构来完成工作。
虽然爬虫技术经过几十年的发展,在整体框架上已经比较成熟,但随着互联网的不断发展,也面临着一些具有挑战性的新问题。一般爬虫框架如下:
通用爬虫框架
常用爬虫框架流程:
1)首先从互联网页面中仔细挑选部分网页,将这些网页的链接地址作为*敏*感*词*URL;
2) 将这些*敏*感*词*网址放入待抓取的网址队列中;
3)爬虫依次读取要爬取的URL,通过DNS解析URL,将链接地址转换为网站服务器对应的IP地址。
4)然后将网页的IP地址和相对路径名交给网页下载器,
5)网页下载器负责页面内容的下载。
6)对于下载到本地的网页,一方面存储在页库中,等待索引等后续处理;另一方面,将下载的网页的URL放入已爬取的URL队列中,该队列记录爬虫系统已经下载的网页的URL,避免网页的重复爬取。
7)对于刚刚下载的网页,提取其中收录的所有链接信息,并在抓取的URL队列中进行检查。如果发现链接没有被爬取,就把这个URL放到待爬取URL队bad!
8、在9)结束时,会在后续的爬取调度中下载该URL对应的网页,以此类推,形成循环,直到待爬取的URL队列为空。
3. 爬虫策略
在爬虫系统中,待爬取的 URL 队列是一个重要的部分。待爬取的URL队列中的URL的排列顺序也是一个重要的问题,因为它涉及到先爬到哪个页面,再爬到哪个页面。确定这些 URL 排列顺序的方法称为爬取策略。
3.1 深度优先搜索策略(循序渐进)
即图的深度优先遍历算法。网络爬虫会从起始页开始,逐个跟踪每个链接,处理完这一行后,会移动到下一个起始页,继续跟踪链接。
我们用图表来说明:
我们假设互联网是一个有向图,图中的每个顶点代表一个网页。假设初始状态是图中的所有顶点都没有被访问过,那么深度优先搜索可以从图中的某个顶点开始,访问这个顶点,然后从v的未访问的相邻点开始依次遍历深度优先的图形,直到到达图形。图中所有与 v 相连的路径的顶点都已被访问过;如果此时图中存在未访问过的顶点,则选择图中另一个未访问过的顶点作为起点,重复上述过程,直到到目前为止图中所有顶点都被访问过。
以下图中的无向图 G1 为例,对图进行深度优先搜索:
G1
搜索过程:
假设search fetch从顶点页面v1开始,访问页面v1后,选择邻接页面v2。由于 v2 没有被访问过,所以从 v2 开始搜索。以此类推,然后从v4、v8、v5开始搜索。访问 v5 后,由于 v5 的所有邻居都已访问,因此搜索回到 v8。出于同样的原因,搜索继续返回到 v4、v2 直到 v1。此时,由于v1的另一个相邻点没有被访问,所以搜索从v1到v3,然后继续。因此,得到的顶点访问序列为:
3.2 广度优先搜索策略
广度优先遍历的基本思想是将新下载的网页中找到的链接直接插入待爬取URL队列的末尾。也就是说,网络爬虫会先爬取起始网页链接的所有网页,然后选择其中一个链接的网页,继续爬取该网页链接的所有网页。该算法的设计和实现比较简单。目前,为了覆盖尽可能多的网页,一般采用广度优先搜索方式。也有许多研究将广度优先搜索策略应用于聚焦爬虫。其基本思想是距初始 URL 一定链接距离内的网页具有较高的主题相关性概率。另一种方法是将广度优先搜索与网络过滤技术相结合,首先使用广度优先策略抓取网页,然后过滤掉不相关的页面。这些方法的缺点是随着爬取的网页数量的增加,会下载和过滤大量不相关的网页,算法的效率会变低。
以上图为例,抓取过程如下:
广度搜索过程:
首先访问页面v1和v1的相邻点v2和v3,然后依次访问v2的相邻点v4和v5以及v3的相邻点v6和v7,最后访问v4的相邻点v8。由于这些顶点的邻接都被访问过,并且图中的所有顶点都被访问过,图的遍历就由这些完成了。得到的顶点访问序列是:
v1→v2→v3→v4→v5→v6→v7→v8
与深度优先搜索类似,在遍历过程中也需要一个访问标志数组。并且,为了顺序访问路径长度为2、3、...的顶点,需要附加一个队列来存储路径长度为1、2、的访问顶点……
3.2 最佳优先搜索策略
最佳优先级搜索策略是根据一定的网页分析算法预测候选URL与目标网页的相似度,或与主题的相关度,选择评价最好的一个或几个URL进行爬取。
3.3.反向链接计数策略
反向链接数是指从其他网页指向一个网页的链接数。反向链接的数量表示网页内容被他人推荐的程度。因此,在很多情况下,搜索引擎的爬取系统会使用这个指标来评估网页的重要性,从而确定不同网页的爬取顺序。
在真实的网络环境中,由于广告链接和作弊链接的存在,反向链接的数量并不能完全等同于他人的重要性。因此,搜索引擎倾向于考虑一些可靠的反向链接计数。
3.4.部分PageRank策略,最佳优先搜索策略
Partial PageRank算法借鉴了PageRank算法的思想:根据一定的网页分析算法,预测候选URL与目标网页的相似度,或者与主题的相关性,选择一个或多个URL用最佳评价来爬取,即对于下载的网页,与待爬取的URL队列中的URL一起形成一组网页,计算每个页面的PageRank值。按该顺序抓取页面。
它只访问页面分析算法预测为“有用”的页面。一个问题是爬虫爬取路径上的许多相关网页可能会被忽略,因为最佳优先策略是局部最优搜索算法。因此,需要将最佳优先级与具体应用结合起来进行改进,从而跳出局部最优点。研究表明,这样的闭环调整可以将不相关页面的数量减少 30% 到 90%。
如果每次爬取一个页面都重新计算一次PageRank值,折中的解决方案是:每爬完K个页面,重新计算一次PageRank值。但是这种情况还是有一个问题:对于下载页面中分析的链接,也就是我们前面提到的那部分未知网页,暂时没有PageRank值。为了解决这个问题,会给这些页面一个临时的PageRank值:将这个网页所有传入链接传入的PageRank值聚合起来,从而形成未知页面的PageRank值,从而参与排序。
3.5.OPIC 政策方针
该算法实际上为页面分配了一个重要性分数。在算法开始之前,所有页面都会获得相同的初始*敏*感*词*。当某个页面P被下载时,P的*敏*感*词*分配给从P分析的所有链接,P的*敏*感*词*被清空。根据*敏*感*词*数量对待爬取URL队列中的所有页面进行排序。
3. 6.大网站优先策略
所有待爬取的URL队列中的网页都按照它们所属的网站进行分类。网站需要下载的页面较多,请先下载。这种策略也称为大站点优先策略。
4. Web 更新策略
互联网实时变化并且非常动态。网页更新策略主要决定何时更新之前已经下载的页面。常见的更新策略有以下三种:
**1.历史参考政策**
顾名思义,它根据页面过去的历史更新数据来预测未来页面何时会发生变化。通常,预测是通过泊松过程建模来进行的。
2.用户体验策略
尽管搜索引擎可以为某个查询返回大量结果,但用户通常只关注结果的前几页。因此,爬虫系统可以优先更新那些实际在查询结果前几页的页面,然后再更新后面的那些页面。这个更新策略也需要用到历史信息。UX 策略保留网页的多个历史版本,并根据每个过去内容更改对搜索质量的影响得出一个平均值,并以此值作为决定何时重新抓取的基础。3.聚类采样策略 上面提到的两种更新策略有一个前提:需要网页的历史信息。这种方式存在两个问题:第一,如果系统为每个系统保存了多个版本的历史信息,无疑会增加很多系统负担;第二,如果新网页完全没有历史信息,就无法确定更新策略。
该策略认为网页具有许多属性,具有相似属性的网页可以认为具有相似的更新频率。计算某一类别网页的更新频率,只需对该类别的网页进行采样,并将其更新周期作为整个类别的更新周期。基本思路如下:
5. 云存储文档
应用知识:
1. GFS,使用GFS分布式文件系统存储海量文档。
2. BitTable,在GFS的基础上构建BitTable数据模型;
3、MegaStore的存储模型是基于BitTable的存储计算模型。
4. Map/Reduce云计算模型和系统计算框架。
4.1 BitTable 存储原创网页信息
逻辑模型如图4-1所示,示例 crawldb 表用于存储爬虫爬取的网页信息,
其中:Row Key是网页的URL。为了排序效率,URL中的主机域名的字符序列经常颠倒,例如处理为com.xxx.www;
Column Family包括title、content和anchor,其中tile保存网页的标题,content保存网页的html内容,anchor保存其他网页引用的网页的链接,qualifier是其他网页的URL网页,内容为链接页面在其他网页中的显示字符,相同锚链接的URL主机域字符串取反。在不同时间获取的同一个网页的相关内容,用不同的时间戳时间戳标记,如图纵坐标所示,可以看到不同的版本。
图 4-1 Crawldb Table 逻辑模型
在实际存储中,图 4-1 所示的多维逻辑结构会被二维扁平化为 (Key, Value) 对并排序。在(Key, Value)中,Key由四维键值组成,包括:Row Key、ColumnFamily(使用8位编码进行处理)、Column Qualifier和Timestamp,如图4-2所示,即Key的实际结构,在对key进行排序的过程中,Timestamp最新的key会排在最前面,flag项用来指示系统需要对(Key, Value)记录执行的算子,比如如添加、删除和更新。
图4-2 关键*敏*感*词*
图 4-3 展示了 crawldb 经过二维平面化后的排序格式。图中Key列中的信息由Row Key(页面URL)、Column Family、Column Qualifer和Timestamp组成。Key标志项不显示,标志项主要用于表项处理。
图4-3 crawldb表的key/value列表
图 4-4 显示了 crawldb 表的 CellStore 文件格式。排序后的 Key 和 Value 对存储在 CellStore 文件中。在物理上,这些数据被压缩和存储,并被组织成大约 64k 的块;在文件末尾,保留了三个索引部分:Bloom Filter、Block Index(行键+文件内的块偏移)、Trailer。
4.2Map/Reduce计算模型处理网页信息:网页去重和倒排索引的生成
我们使用简单的策略对网页进行重复数据删除。目标是在网页集合中找到所有具有相同内容的网页,并采用对网页内容进行哈希处理的方法,例如MD5。如果两个网页的MD5值相同,则可以认为两个网页内容相同。内容完全一样。在Map/Reduce框架中,输入数据就是网页本身,网页的URL可以作为输入数据的key,网页的内容就是输入数据的值;Map操作使用MD5计算每个网页内容的hash值,使用这个hash值作为中间数据的key,网页的URL作为中间数据的值:Reduce操作为同一个key的中间数据对应的URL建立链表结构。哪些页面。这样就完成了识别具有相同内容的网页的任务。
对于建立倒排索引的任务,如图4-6所示,输入数据也是一个网页,网页的DOCID作为输入数据的Key,出现在web page是输入数据的Value;Map操作会将输入的数据转换为(word, DOCID)的形式,即以一个word为key,以DOCID为中间数据的value。每个词对应的网页ID列表: . 这是单词word对应的倒排列表。这样就可以建立一个简单的倒排索引,并在Reduce阶段进行一些复杂的操作,得到更复杂的倒排索引。
图 4-6
参考:
《这就是搜索引擎:核心技术详解》
《搜索引擎——信息检索实践》