from urllib.robotparser import *
# 获取robots协议内容
def get_robots(robot_url):
"""
:param robot_url:
:return:
"""
# class urllib.robotparser.RobotFileParser(url='')
rp = RobotFileParser()
'''
这个类提供了一些可以读取、解析和回答关于 url 上的 robots.txt 文件的问题的方法
'''
# set_url(url)设置指向 robots.txt 文件的 URL
rp.set_url(robot_url)
'''
这两句也等价于
rp = RobotFileParser(url=robot_url)
'''
# read()读取robots文件并进行分析
rp.read()
'''
这个方法执行一个读取和分析操作,如果不调用这个方法,接下来的所有判断都是False
这个方法不返回任何内容
'''
return rp
'''
以上方法也等价于
import urllib.request as ur
from urllib.request import RobotFileParser
# 获取robots协议内容
def get_robots(robot_url):
"""
:param robot_url:
:return:
"""
rp = RobotFileParser()
rp.parse(ur.urlopen(robot_url).read().decode('UTF-8'))
return rp
'''
# can_fetch(use-agent, url)如果允许 user-agent 按照被解析 robots.txt 文件中的规则来获取 url 则返回 True
robot_url = "https://www.baidu.com/robots.txt"
rp = get_robots(robot_url=robot_url)
print(rp.can_fetch('Sogou News Spider', 'https://www.baidu.com'))
# modified()将最近一次获取 robots.txt 文件的时间设置为当前时间
rp.modified()
'''
无返回内容
'''
# mtime()返回最近一次获取 robots.txt 文件的时间
print(rp.mtime())
# crawl_delay(useragent)为指定的 useragent 从 robots.txt 返回 Crawl-delay 形参
print(rp.crawl_delay(useragent='Sogou News Spider'))
'''
如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误,则返回 None
3.6版本新功能
'''
# request_rate(useragent)
# 以 named tuple RequestRate(requests, seconds) 的形式从 robots.txt 返回 Request-rate 形参的内容
print(rp.request_rate(useragent='Sogou News Spider'))
'''
如果此形参不存在或不适用于指定的 useragent 或者此形参的 robots.txt 条目存在语法错误,则返回 None
'''
# site_maps()以 list() 的形式从 robots.txt 返回 Sitemap 形参的内容
print(rp.site_maps())
'''
如果此形参不存在或者此形参的 robots.txt 条目存在语法错误,则返回 None
3.8版本新功能
'''
[python爬虫]--robots.txt机器人协议(urllib.robotparser库)
最新推荐文章于 2023-11-14 23:52:09 发布