您的位置:首页 > 理论基础 > 计算机网络

Python 网络爬虫 010 (高级功能) 解析 robots.txt 文件

2016-09-19 15:19 766 查看

解析
robots.txt
文件

使用的系统:Windows 10 64位

Python 语言版本:Python 2.7.10 V

使用的编程 Python 的集成开发环境:PyCharm 2016 04

我使用的 urllib 的版本:urllib2

注意: 我没这里使用的是 Python2 ,而不是Python3

一 . 前言

之前,我在网络爬虫科普的时候,介绍过
robots.txt
文件,如果你还了解这个文件的功能,请到这个博客学习。

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

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

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

二 . 原理

我们先来看看目标
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[/code] 
这个
robots.txt
文件中说:对于
BadCrawler
这样的代理用户是禁止浏览本站点的。

我们现在使用这个 Python 自带的
robotparser
模块测试一下:

>>> import robotparser
>>> rp = robotparser.RobotFileParser()
>>> rp.set_url('http://example.webscraping.com/robots.txt')
>>> rp.read()
>>> url = 'http://example.webscraping.com'
>>> user_agent = 'BadCrawler'
>>> rp.can_fetch(user_agent, url)
False
>>> user_agent = 'GoodCrawler'
>>> rp.can_fetch(user_agent, url)
True
>>>


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


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

搞定

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐