Robots 协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准( Robots Exclusion Protocol ),用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取 它通常是一个叫作 robots.txt 的文本文件,一般放在网站的根目录下
当搜索爬虫访问一个站点时,它首先会检查这个站点根目录下是否存在 robots.txt 文件,如果存在, 搜索爬虫会根据其中定义的爬取范围来爬取, 如果没有找到这个文件,搜索爬虫便会访问所有可直接访问的页面:
看个robots.txt的样例:
User-agent: *
Disallow: /
Allow: /public/
这个定义就实现了对所有搜索爬虫只允许爬取putblic目录的功能,将上述内容保存成robots.txt文件,放在网站的根目录下,和网站的入口文件(比如:index.php,index.html,index.jsp)
Allow一般和Disallow一起使用,一般不会单独使用,用来排除某些操作限制。
常见搜索爬虫的名称及其对应的网站
robotparse模块可以实现帮助我们解析robots.txt文件,来判断我们是否有权限来爬取这个网页
urllib.robotparser.RobotFileParser(url="")
set_url():用来设置robots.txt文件的链接。如果在创建RobotFileParser对象时传入链接,那么就不需要再使用这个方法设置了
read() :读取 robots.txt 文件并进行分析,注意,这个方法执行一个读取和分析操作,如果不调用这个方法,接下来的判断都会为 False ,所以一定记得调用这个方法 这个方法不会返 回任何内容,但是执行了读取操作
parse():用来解析 robots.txt 文件,传入的参数是robots.txt 某些行的内容 ,它会按照 robots.txt 的语法规则来分析这些内容
can_fetch() :该方法传人两个参数 第一个是 User-agent ,第二个是要抓取的 URL 返回的内容是该搜索引擎是否可以抓取这个 URL ,返回结果是 True或 False
mitme() :返回的是上次抓取和分析 robots.txt 的时间,这对于长时间分析和抓取的搜索爬虫 很有必要的,你可能需要定期检查来抓取最新的 robots.txt
modified()::它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析 robots.txt 的时间
from urllib.robotparser import RobotFileParser
rq = RobotFileParser()
rq.set_url("https://blog.csdn.net/Smart_look?spm=1000.2115.3001.5343")
rq.read()
print(rq.can_fetch("*","https://blog.csdn.net/Smart_look?spm=1000.2115.3001.5343"))
结果:
True
也可以使用parse() 方法来执行读取
from urllib.robotparser import RobotFileParser
from urllib.request import urlopen
rq = RobotFileParser()
rq.parse(urlopen("https://blog.csdn.net/Smart_look?spm=1000.2115.3001.5343").read().decode("utf-8").split("\n"))
print(rq.can_fetch("*","https://blog.csdn.net/Smart_look?spm=1000.2115.3001.5343"))
结果:
True