robots协议的具体内容,robots协议全称
2019独角兽企业招聘Python工程师标准
使用urllib的robotparser模块,我们可以分析网站的Robots协议。在这一节中,让我们简单看一下这个模块的用法。
1.Robots协议Robots协议也叫爬虫协议和机器人协议,全称是Robots Exclusion Protocol,用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些页面不可以抓取。通常是一个名为robots.txt的文本文件,通常放在网站的根目录下。
当搜索爬虫访问一个站点时,它会首先检查这个站点的根目录中是否存在robots.txt文件。如果存在,搜索爬虫会根据其中定义的爬行范围进行爬行。如果找不到该文件,搜索爬虫将访问所有可直接访问的页面。
下面我们来看一个robots.txt的例子:
user-agent:* disallow:/allow:/public/实现了所有搜索爬虫只能爬行public目录的功能。将以上内容保存为robots.txt文件,放在网站的根目录下,与网站的门户文件(如index.php、index.html、index.jsp等)放在一起。).
上面的用户代理描述了搜索爬虫的名称。在这里将其设置为*意味着该协议对任何爬行爬虫都有效。例如,我们可以设置:
User-agent: Baiduspider这意味着我们设置的规则对百度爬虫有效。如果有多个用户代理记录,将限制多个爬网程序进行爬网,但必须至少指定一个。
Disallow指定不允许爬网的目录。例如,在上面的示例中将其设置为/意味着不允许对所有页面进行爬网。
Allow通常与Disallow一起使用,但不单独使用,以排除某些限制。现在我们将其设置为/public/,这意味着不允许爬取所有页面,但是可以爬取公共目录。
我们再来看几个例子。禁止所有爬网程序访问任何目录的代码如下:
用户代理:* Disallow:/允许所有爬网程序访问任何目录的代码如下:
User-agent: *Disallow:此外,也可以将robots.txt文件留空。
禁止所有爬虫访问网站某些目录的代码如下:
user-agent:* disallow:/private/disallow:/tmp/仅允许特定爬虫访问的代码如下:
user-agent:web crawler disallow:user-agent:* disallow:/这是编写robots.txt的一些常用方法
2.爬虫的名称。你可能会困惑。爬虫的名字从何而来?为什么叫这个名字?其实它有一个固定的名字。比如百度的叫BaiduSpider。表1列出了一些常见搜索爬虫的名称及其对应的网站。
表3-1一些常用搜索爬虫的名称及其对应的网站
爬虫名称
名字
网站
蜘蛛
百度(全球最大的中文搜索引擎)
www.baidu.com
谷歌机器人
谷歌
www.google.com
360Spider
360搜索
www.so.com
YodaoBot
有能力的
www.youdao.com
ia_archiver
阿莱夏
www.alexa.cn
小型摩托车
远景公司
www.altavista.com
3.机器人解析器
了解了Robots协议之后,我们就可以使用robotparser模块来解析robots.txt这个模块提供了一种RobotFileParser,可以根据一个网站的robots.txt文件来判断一个爬虫是否有权限抓取这个网页。
这个类使用起来非常简单,只需要在构造函数中传入robots.txt的链接即可。首先看一下它的声明:
urlib . robot parser . robot file parser(URL= )当然也可以不用传入就声明,默认为空。最后,可以使用set_url()方法进行设置。
下面是这个类的一些常用方法。
set_url():用于设置robots.txt文件的链接。如果在创建RobotFileParser对象时传入了一个链接,则不再需要使用此方法来设置它。read():读取robots.txt文件并进行分析。请注意,此方法执行读取和分析操作。如果不调用这个方法,下一次判断就会为假,所以一定要调用这个方法。此方法不返回任何内容,而是执行读取操作。parse():用于解析robots.txt文件。传入的参数是robots.txt的某些行的内容,它会根据robots.txt的语法规则分析这些内容can_fetch():这个方法传入两个参数,第一个是User-agent,第二个是要抓取的URL。返回的内容是搜索引擎是否能抓取这个URL,返回的结果是真还是假。mtime():返回robots.txt最后一次爬取和分析的时间,对于分析和爬取时间较长的搜索爬虫来说是必须的。可能需要定期检查抓取最新的robots.txt.modified():对于长期分析抓取的搜索爬虫也很有帮助。将当前时间设置为上次爬网和分析robots.txt的时间。我们来看一个例子:
从urllib.robotparser导入RobotFileParser RP=RobotFileParser()RP . set _ URL( http://www . jinshu . com/robots . txt )RP . read()print(RP . can _ fetch( * ,http://www . jinshu . com/p/b 67554025d 7d ))print(RP . can _ fetch( *, 3http://www . jinshu . com/search?Q=pythonpage=1type=collections ))这里以简书为例。首先创建RobotFileParser对象,然后通过set_url()方法设置robots.txt的链接。当然,如果不使用这个方法,可以在声明时直接用下面的方式设置:
RP=robot file parser( 3358 www.jianshu.com/robots.txt)然后,使用can_fetch()方法来确定网页是否可以被爬取。
运行结果如下:
TrueFalse,parser()方法也可用于执行读取和分析,如下所示:
从urllib.robotparser导入RobotFileParserfrom URL lib . request导入urlopenrp=RobotFileParser()RP . parse(urlopen( http://www . jinshu . com/robots . txt )。阅读()。解码( utf-8 )。拆分( \n ))打印(rp.can_fetch(* ,http://www . jinshu . com/p/b 67554025d 7d ))打印(rp.can_fetch(* ,http://www . jinshu . com/search?Q=pythonpage=1type=collections ))运行结果是一样的:
false本节介绍robotparser模块的基本用法和示例,通过该模块,我们可以轻松确定哪些页面可以抓取,哪些页面不可以抓取。
转载于:https://my.oschina.net/u/3720876/blog/1620018
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。