十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协议