搜索引擎爬行和抓取
时间:2023年08月10日
/来源:网络
/编辑:佚名
爬行和抓取是搜索引擎工作的第一步,是为了完成数据收集的任务。
1.蜘蛛
搜索引擎用来爬行和访问页面的程序被称为蜘蛛( spider)或机器人(bot)。
搜索引擎蜘蛛访问网站贞面的过程与普通用户使用的浏览器的过程相似。蜘蛛程序发出页面访问请求后,服务器返回HTML代码,蜘蛛程序把收到的代码存入原始页面数据库。搜索引擎为了提高爬行和抓取速度,常使用多个蜘蛛并发分布爬行。
蜘蛛在访问任何一个网站时,都会先访问网站根目录下的robots文件。如果robots文件禁止搜索引擎抓取某些文件或目录,蜘蛛将遵守协议,不抓取被禁止的网址。
和浏览器一样,搜索引擎蜘蛛也有标明自己身份的用户代理( User Agent)名称,站长可以在日志文件中看到搜索引擎的特定用户代理,从而辨识搜索引擎蜘蛛。下面列出常见搜索引擎蜘蛛的当前版本。
1)百度PC蜘蛛
Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
或
Mozilla/5.0(compatible; Baiduspider-render/2.0;+http://www.baidu.com/search/spider.html)从名称看是用于渲染的蜘蛛。
2)百度移动蜘螃
Mozilla/5.0(Linux;u;Android 4.2.2;zh-cn) Apple WebKit/534.46 (KHTML,like Gecko)Version/5.1 Mobile Safarl/10600.6.3 (compatible; Baiduspider/2.0;+http://www. Baidu.com/search/spider.html)
或
Mozilla/5.0 (iPhone;CPU iPhone OS 9_1 like Mac OS X) Apple WebKit/601.1.46(KHTML, like Gecko)Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
3)Google PC蜘蛛
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
或
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1;+http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36
其中W.X.Y.Z是Chrome浏览器版本号。Google蜘蛛从2019年开始使用最新版本的Chrome引擎抓取、渲染页面,所以这个版本号会保持更新。
4)Google移动蜘蛛
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36(KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1;+http://www.google.com/bot.html)
5)BingPC蜘蛛
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
或
Mozilla/5.0 AppleWebKit/537.36 (KHTML,like Gecko, compatible; bingbot/2.0;+http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36 Edg/W.X.Y.Z
6)Bing移动蜘蛛
Mozilla/5.0 (Linux, Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36(KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 Edg/W.X.Y.Z (compatible;bingbot/2.0; +http://www.bing.com/bingbot.htm)
其中W.X.Y.Z是Chrome和Edge浏览器版本号。和Google一样,Bing也使用最新版本的Microsoft Edge引擎抓取、渲染页面。Edge和Chrome一样,也使用Chromium内核,所以Bing蜘蛛用户代理字符串里还包含一个Chrome版本号。
7)搜狗蜘蛛
Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
2.跟踪链接
为了抓取尽量多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬行到下一个页面,就好像蜘蛛在蜘蛛网上爬行那样,这也是搜索引擎蜘蛛这个名称的由来。
整个互联网是由相互链接的网站及页面组成的。从理论上说,蜘蛛从任何一个页面出发,顺着链接都可以爬行到网上的所有页面(除了一些与其他网站没有任何链接的孤岛页面)。当然,由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的基于图论的爬行策略才能遍历网上所有的页面。
最简单的爬行遍历策略分为两种:一种是深度优先,另一种是广度优先。
所谓深度优先,指的是蜘蛛沿着发现的链接一直向前爬行,直到前面再也没有其他链接,然后返回到第一个页面,沿着另一个链接再一直往前爬行。
深度优先遍历策略如图2-36所示,蜘蛛跟踪链接,从A页面爬行到A1、A2、A3、A4。爬完A4页面后,如果已经没有其他链接可以跟踪,则返回A页面,顺着页面上的另一个链接,爬行到Bl、B2、B3、B4。在深度优先策略中,蜘蛛一直爬到无法再向前,才返回爬行另一条线。
广度优先是指蜘蛛在一个页面上发现多个链按时,不是顺着一个链接一直向前,而是把页面上所有第一层链接都爬行一遍,然后再沿着第二层页面上发现的链接爬向第三层页面。
广度优先遍历策略如图2-37所示,蜘蛛从A页面顺着链接爬行到A1、B1、C1页面,直到A页面上的所有链接都爬行完毕,再从A1页面发现的下一层链接,爬行到A2、A3、A4……页面。
从理论上说,无论是深度优先还是广度优先,只要给予蜘蛛足够的时间,都能爬完整个互联网。但在实际工作中,蜘蛛的带宽资源、时间都不是无限的,不可能、也没必要爬完所有页面。实际上,最大的搜索引擎也只是爬行和收录了互联网的一小部分内容。
深度优先和广度优先这两种遍历策略通常是混合使用的,这样既可以照顾到尽量多的网站(广度优先),也能照顾到一部分网站的内页(深度优先),同时也会考虑页面权重、网站规模、外链、更新等因素。
3.吸引蜘蛛
由此可见,虽然理论上蜘蛛能爬行和抓取所有页面,但实际上不能、也不会这么做。搜索引擎优化人员要想让更多自己的页面被收录,就要想方设法吸引蜘蛛来抓取。既然不能抓取所有页面,蜘蛛所要做的就是尽量抓取重要页面。哪些页面会被认为比较重要呢?有几方面影响因素。
(1)网站和页面权重。质量高、资格老的网站被认为权重比较高,这种网站上的页面被爬行的深度也会比较高,所以会有更多内页被收录。
(2)页面更新度。蜘蛛每次抓取都会把页面数据存储起来。如果下一次抓取发现页面与第一次收录的完全一样,说明页面没有更新。多次抓取后,蜘蛛会对页面的更新频率有所了解,不常更新的页面,蜘蛛也就没有必要经常抓取了。如果页面内容经常更新,蜘蛛就会更加频繁地访问这种页面,页面上出现的新链接,也自然会被蜘蛛更快地跟踪,抓取新页面。
(3)导入链接。无论是外部链接还是同一个网站的内部链接,要被蜘蛛抓取,就必须有能够进入页面的导入链接,否则蜘蛛根本不知道页面的存在。高质量的导入链接也经常使页面上的导出链接被爬行的深度增加。
(4)与首页点击距离。一般来说,网站上权重最高的是首页,大部分外部链接是指向首页的,蜘蛛访问最频繁的也是首页。与首页点击距离越近,页面权重越高,被蜘蛛爬行的机会也就越大。
(5)URL结构。页面权重是在收录并进行迭代计算后才知道的,前面提到过,页面权重越高越有利于被抓取,那么搜索引擎蜘蛛在抓取前怎么知道这个页面的权重呢?蜘蛛会进行预判,除了链接、与首页距离、历史数据等因素,短的、层次浅的URL也可能被直观地认为在网站上的权重相对较高。
4.地址库及调度系统
为了避免重复爬行和抓取网址,搜索引擎会建立地址库,记录已经被发现但还有没有抓取的页面,以及已经被抓取的页面。蜘蛛在页面上发现链接后并不是马上就去访问,而是将URL存入地址库,然后统一由调度系统安排抓取。
地址库中的URL有以下几个来源。
• 人工录入的种子网站。
• 蜘蛛抓取页面后,从HTML中解析出新的链接URL,与地址库中的数据进行对比,如果是地址库中没有的网址,就存入待访问地址库。
• 站长主动通过表格提交进来的网址。
• 站长通过XML网站地图、站长平台提交的网址。
蜘蛛按重要性从待访问地址库中提取URL,访问并抓取页面,然后把这个URL从待访问地址库中删除,存放进已访问地址库中。
无论是通过XML网站地图还是通过表格提交的网址,都只是存入地址库而己,是否抓取和收录取决于其页面的重要性和质量。搜索引擎收录的绝大部分页面是蜘蛛自己跟踪链接得到的。对中小网站来说,提交页面的作用微乎其微,搜索引擎更喜欢自己沿着链接发现新页面。大型网站提交XML网站地图对收录有一定帮助。
5.文件存储
搜索引擎蜘蛛抓取的数据存入原始页面数据库,其中的页面数据与用户浏览器得到的HTML是完全一样的,每个URL都有一个独特的文件编号。
6.爬行时的复制内容检测
检测并删除复制内容通常是在下面介绍的预处理过程中进行的,但现在的蜘蛛在爬行和抓取文件时,也会进行一定程度的复制内容检测。若发现权重很低的网站上出现大量转载或抄袭内容,蜘蛛很可能不再继续爬行。这也是有的站长在日志文件中发现了蜘蛛,但页面却从来没有被真正收录过的原因之一。
1.蜘蛛
搜索引擎用来爬行和访问页面的程序被称为蜘蛛( spider)或机器人(bot)。
搜索引擎蜘蛛访问网站贞面的过程与普通用户使用的浏览器的过程相似。蜘蛛程序发出页面访问请求后,服务器返回HTML代码,蜘蛛程序把收到的代码存入原始页面数据库。搜索引擎为了提高爬行和抓取速度,常使用多个蜘蛛并发分布爬行。
蜘蛛在访问任何一个网站时,都会先访问网站根目录下的robots文件。如果robots文件禁止搜索引擎抓取某些文件或目录,蜘蛛将遵守协议,不抓取被禁止的网址。
和浏览器一样,搜索引擎蜘蛛也有标明自己身份的用户代理( User Agent)名称,站长可以在日志文件中看到搜索引擎的特定用户代理,从而辨识搜索引擎蜘蛛。下面列出常见搜索引擎蜘蛛的当前版本。
1)百度PC蜘蛛
Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
或
Mozilla/5.0(compatible; Baiduspider-render/2.0;+http://www.baidu.com/search/spider.html)从名称看是用于渲染的蜘蛛。
2)百度移动蜘螃
Mozilla/5.0(Linux;u;Android 4.2.2;zh-cn) Apple WebKit/534.46 (KHTML,like Gecko)Version/5.1 Mobile Safarl/10600.6.3 (compatible; Baiduspider/2.0;+http://www. Baidu.com/search/spider.html)
或
Mozilla/5.0 (iPhone;CPU iPhone OS 9_1 like Mac OS X) Apple WebKit/601.1.46(KHTML, like Gecko)Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
3)Google PC蜘蛛
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
或
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1;+http://www.google.com/bot.html) Chrome/W.X.Y.Z Safari/537.36
其中W.X.Y.Z是Chrome浏览器版本号。Google蜘蛛从2019年开始使用最新版本的Chrome引擎抓取、渲染页面,所以这个版本号会保持更新。
4)Google移动蜘蛛
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36(KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; Googlebot/2.1;+http://www.google.com/bot.html)
5)BingPC蜘蛛
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
或
Mozilla/5.0 AppleWebKit/537.36 (KHTML,like Gecko, compatible; bingbot/2.0;+http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36 Edg/W.X.Y.Z
6)Bing移动蜘蛛
Mozilla/5.0 (Linux, Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36(KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 Edg/W.X.Y.Z (compatible;bingbot/2.0; +http://www.bing.com/bingbot.htm)
其中W.X.Y.Z是Chrome和Edge浏览器版本号。和Google一样,Bing也使用最新版本的Microsoft Edge引擎抓取、渲染页面。Edge和Chrome一样,也使用Chromium内核,所以Bing蜘蛛用户代理字符串里还包含一个Chrome版本号。
7)搜狗蜘蛛
Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
2.跟踪链接
为了抓取尽量多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬行到下一个页面,就好像蜘蛛在蜘蛛网上爬行那样,这也是搜索引擎蜘蛛这个名称的由来。
整个互联网是由相互链接的网站及页面组成的。从理论上说,蜘蛛从任何一个页面出发,顺着链接都可以爬行到网上的所有页面(除了一些与其他网站没有任何链接的孤岛页面)。当然,由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的基于图论的爬行策略才能遍历网上所有的页面。
最简单的爬行遍历策略分为两种:一种是深度优先,另一种是广度优先。
所谓深度优先,指的是蜘蛛沿着发现的链接一直向前爬行,直到前面再也没有其他链接,然后返回到第一个页面,沿着另一个链接再一直往前爬行。
深度优先遍历策略如图2-36所示,蜘蛛跟踪链接,从A页面爬行到A1、A2、A3、A4。爬完A4页面后,如果已经没有其他链接可以跟踪,则返回A页面,顺着页面上的另一个链接,爬行到Bl、B2、B3、B4。在深度优先策略中,蜘蛛一直爬到无法再向前,才返回爬行另一条线。
广度优先是指蜘蛛在一个页面上发现多个链按时,不是顺着一个链接一直向前,而是把页面上所有第一层链接都爬行一遍,然后再沿着第二层页面上发现的链接爬向第三层页面。
广度优先遍历策略如图2-37所示,蜘蛛从A页面顺着链接爬行到A1、B1、C1页面,直到A页面上的所有链接都爬行完毕,再从A1页面发现的下一层链接,爬行到A2、A3、A4……页面。
从理论上说,无论是深度优先还是广度优先,只要给予蜘蛛足够的时间,都能爬完整个互联网。但在实际工作中,蜘蛛的带宽资源、时间都不是无限的,不可能、也没必要爬完所有页面。实际上,最大的搜索引擎也只是爬行和收录了互联网的一小部分内容。
深度优先和广度优先这两种遍历策略通常是混合使用的,这样既可以照顾到尽量多的网站(广度优先),也能照顾到一部分网站的内页(深度优先),同时也会考虑页面权重、网站规模、外链、更新等因素。
3.吸引蜘蛛
由此可见,虽然理论上蜘蛛能爬行和抓取所有页面,但实际上不能、也不会这么做。搜索引擎优化人员要想让更多自己的页面被收录,就要想方设法吸引蜘蛛来抓取。既然不能抓取所有页面,蜘蛛所要做的就是尽量抓取重要页面。哪些页面会被认为比较重要呢?有几方面影响因素。
(1)网站和页面权重。质量高、资格老的网站被认为权重比较高,这种网站上的页面被爬行的深度也会比较高,所以会有更多内页被收录。
(2)页面更新度。蜘蛛每次抓取都会把页面数据存储起来。如果下一次抓取发现页面与第一次收录的完全一样,说明页面没有更新。多次抓取后,蜘蛛会对页面的更新频率有所了解,不常更新的页面,蜘蛛也就没有必要经常抓取了。如果页面内容经常更新,蜘蛛就会更加频繁地访问这种页面,页面上出现的新链接,也自然会被蜘蛛更快地跟踪,抓取新页面。
(3)导入链接。无论是外部链接还是同一个网站的内部链接,要被蜘蛛抓取,就必须有能够进入页面的导入链接,否则蜘蛛根本不知道页面的存在。高质量的导入链接也经常使页面上的导出链接被爬行的深度增加。
(4)与首页点击距离。一般来说,网站上权重最高的是首页,大部分外部链接是指向首页的,蜘蛛访问最频繁的也是首页。与首页点击距离越近,页面权重越高,被蜘蛛爬行的机会也就越大。
(5)URL结构。页面权重是在收录并进行迭代计算后才知道的,前面提到过,页面权重越高越有利于被抓取,那么搜索引擎蜘蛛在抓取前怎么知道这个页面的权重呢?蜘蛛会进行预判,除了链接、与首页距离、历史数据等因素,短的、层次浅的URL也可能被直观地认为在网站上的权重相对较高。
4.地址库及调度系统
为了避免重复爬行和抓取网址,搜索引擎会建立地址库,记录已经被发现但还有没有抓取的页面,以及已经被抓取的页面。蜘蛛在页面上发现链接后并不是马上就去访问,而是将URL存入地址库,然后统一由调度系统安排抓取。
地址库中的URL有以下几个来源。
• 人工录入的种子网站。
• 蜘蛛抓取页面后,从HTML中解析出新的链接URL,与地址库中的数据进行对比,如果是地址库中没有的网址,就存入待访问地址库。
• 站长主动通过表格提交进来的网址。
• 站长通过XML网站地图、站长平台提交的网址。
蜘蛛按重要性从待访问地址库中提取URL,访问并抓取页面,然后把这个URL从待访问地址库中删除,存放进已访问地址库中。
无论是通过XML网站地图还是通过表格提交的网址,都只是存入地址库而己,是否抓取和收录取决于其页面的重要性和质量。搜索引擎收录的绝大部分页面是蜘蛛自己跟踪链接得到的。对中小网站来说,提交页面的作用微乎其微,搜索引擎更喜欢自己沿着链接发现新页面。大型网站提交XML网站地图对收录有一定帮助。
5.文件存储
搜索引擎蜘蛛抓取的数据存入原始页面数据库,其中的页面数据与用户浏览器得到的HTML是完全一样的,每个URL都有一个独特的文件编号。
6.爬行时的复制内容检测
检测并删除复制内容通常是在下面介绍的预处理过程中进行的,但现在的蜘蛛在爬行和抓取文件时,也会进行一定程度的复制内容检测。若发现权重很低的网站上出现大量转载或抄袭内容,蜘蛛很可能不再继续爬行。这也是有的站长在日志文件中发现了蜘蛛,但页面却从来没有被真正收录过的原因之一。
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03