人生は短いですが、私は、Pythonを使用しました
前述のポータル:
白パイソンクローラサイエンス(2):事前準備(A)は、実質的ライブラリ搭載されています
Linuxの事前準備のベース(B)入門:白爬虫類は、Python(3)を学びます
プレエントリー製剤のドッカーベース(III):白色爬虫類は、Pythonを学ぶ(4)
ホワイト学校Pythonの爬虫類(5):事前準備(4)データベース・インフラストラクチャ
ホワイト学校Pythonの爬虫類(6):事前準備(E)クローラフレームのインストール
ホワイト学校Pythonの爬虫類(10):セッションとクッキー
()urllibは基本:ホワイト学校Pythonの爬虫類(11)
ホワイト学校Pythonの爬虫類(12):urllibは基本(B)
ホワイト学校Pythonの爬虫類(13):urllibは基本(C)
ホワイト学校Pythonの爬虫類(14):urllibは使用に基づいて(D)
入門
いくつかのフロントurllibはの導入に基づいて、URLのurllibはを処理するためのモジュールを導入し、最終的には単にトークrobotparserに、robotparserモジュールの導入を行うことなく、この記事を残しました。
ロボットを言っているかのようにビューの命名観点からRobotparserは、実際にここでのロボットは爬虫類を指します。
ロボット契約:Robotparserを言って前に、我々は概念を導入します。
ロボット契約
また、クローラ、ロボットプロトコル、ウェブクローラ除外基準のための完全な名前(ロボット排除プロトコル)と呼ばれるロボットプロトコル合意。
ロボットは、通常と呼ばれるプロトコルに保管され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 上,方便大家取用。