python robotparser,爬取知乎的robots.txt

  • 利用 urllib.robotparser 模块可以对网站的 Robots 协议进行分析
  • Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。robots.txt文件是一个文本文件,放在站点的根目录下。
  • 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

禁止所有爬虫访问任何内容

User-Agent:  *
Disallow:  /

允许所有爬虫访问任何内容

User-Agent:  *
Disallow: 

只允许爬虫访问 public/ 目录

User-agent: *
Disallow: /
Allow: /public/

允许某些爬虫访问某些目录

User-agent:  Baiduspider
Allow:  /article
Allow:  /oshtml
Disallow:  /product/
Disallow:  /

User-Agent:  Googlebot
Allow:  /article
Allow:  /oshtml
Allow:  /product
Allow:  /spu
Allow:  /dianpu
Allow:  /oversea
Allow:  /list
Disallow:  /

User-Agent:  *
Disallow:  /
# 百度 robots 协议示例网址
https://www.baidu.com/robots.txt
  • 关于爬虫名称
爬虫名称所属公司网址
Baiduspider百度www.baidu.com
Googlebot谷歌www.google.com
Bingbot微软必应cn.bing.com
360Spider360搜索www.so.com
Yisouspider神马搜索http://m.sm.cn/
Sogouspider搜狗搜索https://www.sogou.com/
Yahoo! Slurp雅虎https://www.yahoo.com/
.........

urllib.robotparser.RobotFileParser(url='')

  • robotpaser 模块提供一个类 RobotFileParser 专门用来解析 robots.txt,通过解析来判断是否允许爬取网站的某一目录

  • 使用时可以直接传入 url 即可

urllib.robotparser.RobotFileParser(url='https://www.taobao.com/robots.txt')
  • 当然也可以在实例化的时候不传入 url,稍后通过 set_url() 方法传入也是可以的

常用方法:

  • set_url(url):用来设置 robots.txt 文件链接,如果在初次实例化 RobotFileParser 类的时候传入了 url 参数,那么就不需要再次调用此方法设置了
  • read():读取 robots.txt 文件并将读取结果交给 parse() 解析器进行解析
  • parse(lines):用来解析 robots.txt 文件内容,分析传入的某些行的协议内容
  • can_fetch(useragent, url):需要两个参数,User-Agent、所要抓取的 URL 链接,返回此搜索引擎是否允许抓取此 URL,返回结果为 True、False
  • mtime():返回上次抓取分析 robots.txt 文件的时间,这对于需要对 robots.txt 进行定期检查更新的长时间运行的网络爬虫非常有用 。
  • modified():同样的对于长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析 robots.txt 的时间。
  • crawl_delay(useragent):返回抓取延迟时间的值,从相应的 User-Agent 的 robots.txt 返回 Crawl-delay 参数的值。 如果没有这样的参数,或者它不适用于指定的 User-Agent,或者此参数的 robots.txt 条目语法无效,则返回 None。
  • request_rate(useragent):从robots.txt返回Request-rate参数的内容,作为命名元组RequestRate(requests,seconds)。 如果没有这样的参数,或者它不适用于指定的useragent,或者此参数的robots.txt条目语法无效,则返回None。(Python3.6新增方法)

关于 Request-rate 和 Crawl-delay 都是对爬虫爬取频率做限制的,知乎的 robots.txt 协议中就有这两个参数(https://www.zhihu.com/robots.txt),关于这两个参数可以参考知乎问答:https://www.zhihu.com/question/264161961/answer/278828570

 

from urllib.robotparser import RobotFileParser

rp=RobotFileParser()
rp.set_url('http://www.jianshu.com/robot.txt')
rp.read()
print(rp.can_fetch('*','http://www.jianshu.com/p/b67554025d7d'))
print(rp.can_fetch('*','http://www.jianshu.com/search?q=python&page=1&type=collections'))

运行结果·

False
False

 

"""
利用robotparser分析知乎 Robots 协议
"""
import urllib.robotparser


rp = urllib.robotparser.RobotFileParser()

# 设置 robots.txt 文件 URL
rp.set_url('https://www.zhihu.com/robots.txt')

# 读取操作必须有, 不然后面解析不到
rp.read()

# 判断网址是否运行爬取
print(rp.can_fetch('Googlebot', 'https://www.zhihu.com/question/264161961/answer/278828570'))
print(rp.can_fetch('*', 'https://www.zhihu.com/question/264161961/answer/278828570'))

# 返回上次抓取分析 robots.txt 时间
print(rp.mtime())

# 将当前时间设置为上次抓取和分析 robots.txt 的时间
rp.modified()
print(rp.mtime())  # 再次打印时间会有变化

# 返回 robots.txt 文件对请求速率限制的值
print(rp.request_rate('*'))
print(rp.request_rate('MSNBot').requests)

# 返回 robotx.txt 文件对抓取延迟限制的值
print(rp.crawl_delay('*'))
print(rp.crawl_delay('MSNBot'))
True
False
1525659777.562644
1525659777.5746505
None
1
None
10
  •  
"""
使用 parser() 方法执行读取和分析
"""
import urllib.robotparser
import urllib.request


rp = urllib.robotparser.RobotFileParser()
rp.parse(urllib.request.urlopen('https://www.zhihu.com/robots.txt').read().decode('utf-8').split('\n'))

print(rp.can_fetch('Googlebot', 'https://www.zhihu.com/question/264161961/answer/278828570'))
print(rp.can_fetch('*', 'https://www.zhihu.com/question/264161961/answer/278828570'))
True
False

知乎 robots.txt 文件

User-agent: Googlebot
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Googlebot-Image
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Baiduspider-news
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Baiduspider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Baiduspider-image
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sosospider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: bingbot
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: 360Spider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: HaosouSpider 
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: yisouspider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: YoudaoBot
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou Orion spider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou News Spider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou blog
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou spider2
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou inst spider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: Sogou web spider
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: EasouSpider
Request-rate: 1/2 # load 1 page per 2 seconds
Crawl-delay: 10
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-agent: MSNBot
Request-rate: 1/2 # load 1 page per 2 seconds
Crawl-delay: 10
Disallow: /login
Disallow: /logout
Disallow: /resetpassword
Disallow: /terms
Disallow: /search
Disallow: /notifications
Disallow: /settings
Disallow: /inbox
Disallow: /admin_inbox
Disallow: /*?guide*
Disallow: /people/*

User-Agent: *
Disallow: /

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值