爬虫学习——Robots协议和 robotparser模块

初级爬虫学习资源

  1. 爬虫学习——遵纪守法
  2. 一文速通的正则表达式
  3. python中使用正则表达式——为所欲为
  4. 爬虫实战(1)——小试牛刀

如果对符合下列条件的网站进行强行数据采集时,会具有法律风险。

  1. 采集的站点有声明禁止爬虫采集时。
  2. 网站通过Robots协议拒绝采集时。

所以为了避免面向监狱爬虫,我们需要了解Robots协议和robotparser模块(判断url是否可爬取)。

可爬取协议——Robots协议

  • Robots.txt(统一小写)是一种存放于网站根目录下的文本文件
  • 用来告告诉该协议对哪些爬虫生效,哪些网页可以被这些爬虫爬取,哪些不可以
  • 该协议有三个属性:
    1. Uer-agent : 描述了对哪些爬虫有效
    2. Disallow : 描述了哪些网页不可爬
    3. Allow : 声明哪些网页可爬,比Disallow优先级高

案例:

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

该协议对所有爬虫有效,不允许抓取所有页面,但可以抓取 public 目录

User-agent: Baiduspider
Disallow: 

允许百度爬虫抓取所有页面

User-agent: Baiduspider
Disallow: /

禁止百度爬虫爬取任何目录

User-agent: WebCrawler
Disallow:
User-agent: *
Disallow: /

只允许某一个爬虫访问

  • 一些常见搜索爬虫的名称及其对应的网站
爬虫名称名称网站
BaiduSpider百度www.baidu.com
Googlebot谷歌www.google.com
360Spider360 搜索www.so.com
YodaoBot有道www.youdao.com
Bingbot必应www.bing.com

robotparser模块

  • 该模块提供了RobotFileParser类,这个类可以根据网站的 robots.txt 文件来判断一个爬虫是否有权限来爬取这个网页

  • RobotFileParser类的方法

  1. RobotFileParser(url):创建对象

url就是你要爬取的网站的robots.txt 链接

  1. set_url(url):设置引用robots.txt文件的 url
  2. read(): 读取url并将其提供给解析器
  3. can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 URL
  4. parse(lines):按照 robots.txt 的语法规则来分析lines(字符串类型)
  5. mtime方法:返回上次抓取和分析 robots.txt 的时间

用于定期检查以抓取最新的 robots.txt

  1. modified方法:将当前时间设置为上次抓取和分析 robots.txt 的时间

最后两个方法对于长时间分析和抓取的搜索爬虫很有帮助

案例

对于小白,会前四个就够了

from urllib.robotparser import RobotFileParser
#导入RobotFileParser类


url = 'https://www.python.org/robots.txt'
#python官网的robots.txt的url

#方法1:直接用url创造对象
robot = RobotFileParser(url)
#用url调用这个类的构造方法

#方法2:用无参构造函数创造对象,再用url调用对象的set_url 
> 目的都是一样的,设置url
robot1 =  RobotFileParser()
robot1.set_url(url)
#set_url方法: 设置url

#在设置url之后,一定要调用对象的read方法,不然can_fetch方法只会返回false
rpobot1.read()
#read方法: 读取 robots.txt 文件并进行分析

#can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 url
print(rpobot1.can_fetch('Baiduspider', url))
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳衣白卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值