解析 robots.txt 文件

在学习爬虫时有一些站点它在 robots.txt 文件中设定了禁止流量该站点的代理用户。既然目标站点有这样的规矩,我们就要遵循它。

我们需要做的事情就是:先解析 robots.txt 文件。然后在在对需要下载的网页进行判断是否可以爬取。

我们可以使用 Python 自带的 robotparser 模块,轻松的完成这项工作。下面进行实战。(在python3环境下进行)

先来看看目标 robots.txt 文件:http://example.webscraping.com/robots.txt

# section 1
User-agent: BadCrawler
Disallow: /

# section 2
User-agent: *
Crawl-delay: 5
Disallow: /trap 

# section 3
Sitemap: http://example.webscraping.com/sitemap.xml

这个 robots.txt 文件中说:对于BadCrawler 这样的代理用户是禁止浏览本站点的,我们现在使用这个 Python 自带的 robotparser 模块测试一下:

from urllib import robotparser
rp = robotparser.RobotFileParser()
rp.set_url('http://example.webscraping.com/robots.txt')  # 设置引用robots.txt文件的url
rp.read()  # 读取robots.txt url并将其提供给解析器
url = 'http://example.webscraping.com'
user_agent = 'BadCrawler'
print(rp.can_fetch(user_agent, url))
"-------False--------"
user_agent = 'GoodCrawler'
print(rp.can_fetch(user_agent, url))
"-------Ture--------"

上面这个测试说明了,如果你将你的爬虫程序的 代理用户 设置为: BadCrawler 的话,因为你访问的目标站点已经警告你了:“我们禁止用户代理为BadCrawler 的用户访问本站点里面的所有网站”。所以,我们用 robotparser 模块创建的对象,通过rp.can_fetch(user_agent, url)函数返回 :False 。

在can_fetch() 函数前面的一堆都是初始化,can_fetch() 函数是在程序里面使用,它的功能:确定指定的用户代理是否允许访问网页。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值