十urllib库(分析Robots协议)

Posted mr-chenshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十urllib库(分析Robots协议)相关的知识,希望对你有一定的参考价值。

 

利用urllib的robotparser模块,可以实现网站Robots协议的分析

 

1、Robots协议

Robots协议也叫爬虫协议、机器人协议,全名为网络爬虫排除标准,用来告诉爬虫可搜索引擎哪些页面可以抓取,哪些不行,通常是一个叫做robots.txt的文本文件,一般放在网站的根目录

当搜索爬虫访问一个站点,它首先会检查站点根目录下是否有robots.txt文件,如果有,爬虫会根据其定义的范围爬取,如果没有,爬虫就会访问所有能直接访问的页面

robots.txt样例

对所有的爬虫只允许爬取public目标,将其保存robots.txt,然后放在网站的根目录,和网站入口文件,比如index.html等放在一起

技术分享图片

  • User-agent:描述爬虫名,至少有一个,*代表所有
  • Disallow:指定了不允许爬取的目录,/代表不允许抓取所有页面
  • Allow:一般和Disallow一起用,一般不单独用,用来排除某些限制;设置为/public/表示所有页面都不允许抓取,但是可以抓取public目录
  • 禁止所有爬虫访问任何目录:
  • 技术分享图片
  • 允许所有爬虫访问任何目录:(直接留空文件也行)
  • 技术分享图片
  • 禁止所有爬虫访问网站某些目录:
  • 技术分享图片
  • 只允许某一个爬虫访问:
  • 技术分享图片

 

2、爬虫名称

爬虫有固定的名字

常见的搜索爬虫名称和对应网站

  • 爬虫名(网站)
  • BaiduSpider(www.baidu.com)
  • Googlebot(www.gogle.com)
  • 360Spider(www.so.com)
  • YoudaoBot(www.youdao.com)
  • ia_archiver(www.alexa.cn)
  • Scooter(www.altavista.com)

 

3、robotparser

使用robotparser模块来解析robots.txt

该模块提供了一个RovotFileParser类,它可以根据某网站的robots.txt文件来判断一个爬虫是否有权限来爬取这个网页

  • 只需要在构造方法里传入robots.txt链接即可:
  • urllib.robotparser.RobotFileParser(url="")
  • 也可以在声明时留空,使用set_url()方法设置

 

常用方法:

  • set_url():用来设置robots.txt文件的链接(如果创建RobotFileParser对象时传入了链接,就需要这个方法了)
  • read():读取robots.txt文件并进行分析(这个方法执行一个读取和分析的操作,如果不调用这个方法,接下来的判断都会是Flase,它不会反回任何内容,但是执行了读取的操作)
  • parse():用来解析robots.txt文件,传入的参数是robots.txt某些行的内容,会按照robots.txt的语法规则来分析这些内容
  • can_fetch():传入两个参数,第一个是User-agnet,第二个是要抓取的URL,反回的内容是该搜索引擎是否可以抓取这个URL,True或者Flase
  • mtime():反回的是上次抓取和分析robots.txt的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,需要定期检查来抓取最新的robots.txt
  • modified():同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析robots.txt

 

博客园为例,为True,表示可以爬取

技术分享图片

先创建RobotFileParser对象,然后通过set_url()设置robots.txt的链接,接着使用can_fetch()判断网页是否可以被抓取

也可以使用parse()方法读取和解析

技术分享图片

 

以上是关于十urllib库(分析Robots协议)的主要内容,如果未能解决你的问题,请参考以下文章

Python3网络爬虫实战-23使用Urllib:分析Robots协议

python爬虫目录

史上最详细的Python爬虫库urllib讲解:绝对经典,值得收藏

芝麻HTTP:分析Robots协议

08_Robots协议

Urllib库