urllib.request模块(4):分析Robots协议

1.Robots协议

robots协议_百度百科 (baidu.com)

User-agent描述了搜索爬虫的名称,将其设置为*则代表该协议对任何爬虫都有效。

Disallow指定了不允许抓取的目录。Allow一般和Disallow一起使用,用来排除某些限制。

#禁止所有爬虫访问任何目录
User-agent:*
Disallow:/

#允许所有爬虫访问任何目录
User-agent:*
Disallow:
#也可以把robots.txt留空

#禁止所有爬虫访问网站某些目录的代码
User-agent:*
Disallow:/private/
Disallow:/tmp/

#只允许某一个爬虫访问
User-agent:WebCrawler
Disallow:
User-agent:*
Disallow:/

 

2.robotparser模块

用法只需要在构造方法里面传入robots.txt的链接。

声明:

urllib.robotparser.RobotFileParser(url='')

也可以在声明时不传入,默认为空。

 

这个类的常用方法:

set_url():用来设置robots.txt文件的链接。

read():读取robots.txt文件进行分析,执行一个读取和分析的操作。如果不调用这个方法,接下来的判断都会为False。

parse():用来解析robots.txt文件,传入的参数是robots.txt的某些行的内容,它会按照robots.txt的语法规则分析这些内容。

can_fetch():传入两个参数,User-agent和要抓取的URL,它将会判断该搜索引擎能否抓取这个URL,返回False或True。

mtime():返回上次抓取和分析robots.txt的时间。定期检查抓取最新的robots.txt。

modified():将当前时间设置为上次抓取和分析robots.txt的时间。

 

使用read()方法。

代码:

from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url("http://www.python.org/robots.txt")
#或者直接在声明时设置
#rp = RobotFileParser("http://www.python.org/robots.txt")

rp.read()
print(rp.can_fetch("*", "http://www.python.org/downloads/"))
print(rp.can_fetch("*", "http://www.python.org/webstats/"))

运行结果:输出

True

False

 

使用parse()方法进行读取和分析。

代码:

from urllib.robotparser import RobotFileParser
from urllib.request import urlopen

rp = RobotFileParser()
rp.parse(urlopen('http://www.python.org/robots.txt').read().decode('utf-8').split('\n'))
print(rp.can_fetch("*", "http://www.python.org/downloads/"))
print(rp.can_fetch("*", "http://www.python.org/webstats/"))

运行结果:同上

 

参考用书《python3网络爬虫开发实战》

posted @ 2020-12-05 19:01  Hao_ran  阅读(134)  评论(0编辑  收藏  举报