小白学 Python 爬虫(15):urllib 基础使用(五)
人生苦短,我用 Python
前文传送门:
小白学 Python 爬虫(2):前置准备(一)基本类库的安装
小白学 Python 爬虫(3):前置准备(二)Linux基础入门
小白学 Python 爬虫(4):前置准备(三)Docker基础入门
小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装
小白学 Python 爬虫(10):Session 和 Cookies
小白学 Python 爬虫(11):urllib 基础使用(一)
小白学 Python 爬虫(12):urllib 基础使用(二)
小白学 Python 爬虫(13):urllib 基础使用(三)
小白学 Python 爬虫(14):urllib 基础使用(四)
引言
前面几篇 urllib 的基础介绍,分别介绍了 urllib 的处理 URL 的模块,还剩最后一个 robotparser 模块未做介绍,本篇文章来简单的聊聊 robotparser 。
Robotparser 从命名上来看,好像是说机器人,实际上这里的机器人指的是爬虫。
在说 Robotparser 之前,我们先介绍一个概念:Robots协议。
Robots 协议
Robots 协议也称作爬虫协议、机器人协议,它的全名叫作网络爬虫排除标准(Robots Exclusion Protocol)。
Robots 协议通常会保存在一个叫做 robots.txt
的文本文件中,该文件一般位于网站的跟目录中。
这个文件中记载了该网站哪些目录允许爬取,哪些目录不允许爬取。
虽然这个文件并不是强制生效的,但是各位同学最好可以遵循此文件定义的爬取规则。
最近很多搞爬虫的公司都进去了,各位同学一定引以为戒,做一位知法守法的好公民。
我们来看一下淘宝的 Robots 协议,一起了解下 Robots 协议的语法规则:
以下 robots.txt
内容来源:https://www.taobao.com/robots.txt ,由于内容过多,仅截取部分内容。
User-agent: Baiduspider
Allow: /article
Allow: /oshtml
Allow: /ershou
Allow: /$
Disallow: /product/
Disallow: /
User-Agent: Googlebot
Allow: /article
Allow: /oshtml
Allow: /product
Allow: /spu
Allow: /dianpu
Allow: /oversea
Allow: /list
Allow: /ershou
Allow: /$
Disallow: /
......
可以看到,一个 robots.txt
总共分为三个部分:
- User-Agent:描述了搜索爬虫的名称,如果设置为 * 则代表对所有爬虫生效。
- Allow:指定了云讯爬取的目录。
- Disallow:指定了不允许爬取的目录,一般和 Allow 配合使用。
比如上面的这个 Robots 协议,其中的内容定义了百度爬虫和谷歌爬虫的爬取规则,其中对百度爬虫定义了的可爬取路径有 /article
、 /oshtml
、 /ershou
、 /$
,不可爬取的路径有 /product/
和 /
目录。
各位同学可能会有疑问,爬虫的名字是哪来的呢?
emmmmmmmmm,这个小编也不清楚,就当做一些固定用法吧,下表列出一些常见的爬虫名称:
爬虫名称 | 来源 | 来源网站 |
---|---|---|
BaiduSpider | 百度搜索 | www.baidu.com |
Googlebot | 谷歌搜索 | www.google.com |
360Spider | 360 搜索 | www.so.com |
Bingbot | 必应搜索 | cn.bing.com |
Yisouspider | 神马搜索 | m.sm.cn |
Sogouspider | 搜狗搜索 | www.sogou.com |
Yahoo! Slurp | 雅虎搜索 | www.yahoo.com |
Sosospider | 搜搜 | www.soso.com |
robotparser
官方文档:https://docs.python.org/zh-cn/3.7/library/urllib.robotparser.html
在了解了什么是 Robots 协议之后,我们可以使用 robotparser 来解析 Robots 协议。
该模块提供了一个类 RobotFileParser
它可以根据某网站的 robots.txt
文件来判断一个爬取爬虫是否有权限来爬取这个网站的某个路径。
首先我们看一下这个类的声明:
urllib.robotparser.RobotFileParser(url='')
看起来很简单,只需要在构造方法中传入 robots.txt
的路径即可。
接下来我们来看下这个类所具有的方法:
- set_url(url): 如果在声明
RobotFileParser
的时候没有传入robots.txt
的路径,可以调用这个方法传入robots.txt
的路径。 - read():读取
robots.txt
文件并进行分析。注意,这个方法执行一个读取和分析操作,如果不调用这个方法,接下来的判断都会为 False ,所以一定记得调用这个方法。这个方法不会返回任何内容,但是执行了读取操作。 - parse(lines):用来解析
robots.txt
文件,传入的参数是robots.txt
某些行的内容,它会按照robots.txt
的语法规则来分析这些内容。 - can_fetch(useragent, url):该方法传入两个参数,第一个是 User-agent ,第二个是要抓取的 URL 。返回的内容是该搜索引擎是否可以抓取这个 URL ,返回结果是 True 或 False 。
- mtime():返回的是上次抓取和分析
robots.txt
的时间,这对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的robots.txt
。 - modified():它同样对长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析
robots.txt
的时间。 - crawl_delay(useragent):从
robots.txt
返回有关用户代理的抓取延迟参数的值。 如果没有这样的参数,或者该参数不适用于指定的用户代理,或者该参数的robots.txt
条目的语法无效,则返回 None 。 - request_rate(useragent):以指定的元组 RequestRate(requests,seconds) 的形式从
robots.txt
返回 Request-rate 参数的内容。 如果没有这样的参数,或者该参数不适用于指定的用户代理,或者该参数的robots.txt
条目的语法无效,则返回 None 。
举一个简单的例子:
import urllib.robotparser
rp = urllib.robotparser.RobotFileParser()
rp.set_url("https://www.taobao.com/robots.txt")
rp.read()
print(rp.can_fetch('Googlebot', 'https://www.taobao.com/article'))
print(rp.can_fetch('Googlebot', "https://s.taobao.com/search?initiative_id=tbindexz_20170306&ie=utf8&spm=a21bo.2017.201856-taobao-item.2&sourceId=tb.index&search_type=item&ssid=s5-e&commend=all&imgfile=&q=iphone&suggest=history_1&_input_charset=utf-8&wq=&suggest_query=&source=suggest"))
执行结果如下:
True
False
小编这里就用某宝做栗子了,首先创建 RobotFileParser 对象,然后通过 set_url() 方法设置了 robots.txt
的链接。
当然,不用这个方法的话,可以在声明时直接用如下方法设置:
rp = urllib.robotparser.RobotFileParser('https://www.taobao.com/robots.txt')
接着利用 can_fetch() 方法判断了网页是否可以被抓取。
小结
本篇内容到这里就结束了,内容比较简单,希望各位同学以后在写爬虫时候可以遵循 Robot 协议,为了自己的安全着想。
希望各位同学可以自己动手实际操作试试看。
示例代码
本系列的所有代码小编都会放在代码管理仓库 Github 和 Gitee 上,方便大家取用。
参考
https://www.cnblogs.com/zhangxinqi/p/9170312.html
小白学 Python 爬虫(15):urllib 基础使用(五)的更多相关文章
- 小白学 Python 爬虫(13):urllib 基础使用(三)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(11):urllib 基础使用(一)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(12):urllib 基础使用(二)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(14):urllib 基础使用(四)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(16):urllib 实战之爬取妹子图
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(17):Requests 基础使用
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(30):代理基础
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 小白学 Python 爬虫(33):爬虫框架 Scrapy 入门基础(一)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
随机推荐
- [UWP]使用CompositionAPI的翻转动画
1. 运行效果 在 使用GetAlphaMask和ContainerVisual制作长阴影(Long Shadow) 这篇文章里我介绍了一个包含长阴影的番茄钟,这个番茄钟在状态切换时用到了翻转动画,效 ...
- 深入理解计算机系统 第八章 异常控制流 part1
本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...
- i7-9700也能安装Windows7
商家说,i7-8700以上不支持Win7,只能安装Win10.我在手机网上也看过同样的说明,是微软与Intel联合行动,意在强迫用户升级到Win10.文章后面有,并不是不能装win7,是没有提供win ...
- 扛把子 选题 Scrum立会报告+燃尽图 03
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8680 一.小组情况组长:迟俊文组员:宋晓丽 梁梦瑶 韩昊 刘信鹏队名:扛 ...
- 新闻实时分析系统-Flume+HBase+Kafka集成与开发
1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...
- linux [CTRL]+c与[CTRL]+d
[CTRL]+c:中断目前程序.用于在linux中输入了错误的命令或者参数,有的时候会在系统不停的运行,如果想让程序需停下来,可以使用[CTRL]+C [CTRL]+d:这个组合键代表着键盘输入结束( ...
- CSP2019,RP+=150。
csp2019游记 第一题水死了,2分钟过! 第二题被卡住了,才得了30分. 第三题背包DP,可惜了,出了考场才知道... 第四题骗到20分,也算心满意足了.. 150,省二左右,辣鸡... 反正就是 ...
- mvc 学习笔记
1.routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); MVC中的路由忽略,只要访问的地址中带有 .axd , 该请求都将排除在mv ...
- Caffe 图像分类
本文主要描述如何使用 CAFFE 进行图像分类. 开发环境要求:windows 10 64位.Visual Studio 2017..NET framework 4.6.1 分类 在一个项 ...
- PHP安装扩展补充说明
上一篇文章中用到了,php的sodium扩展,那么如何安装PHP扩展呢?基于我之前踩过的一些坑,大致整理了几种安装php扩展的方法.已安装sodium为例 1.先做点准备工作,安装sodium依赖 r ...