urllib.request模块(4):分析Robots协议
1.Robots协议
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网络爬虫开发实战》