成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

編寫爬蟲竟然成了“面向監獄編程”,就是因為不懂Robots協議

網絡 網絡管理
編寫Python爬蟲很容易,不過要想安全地編寫Python爬蟲,就需要了解更多的至少,不光是技術上的,還有法律上的,Robots協議就是其中之一,如果不了解Robots協議,抓取了不該抓取的東西,可能會面臨牢獄之災哦!

[[386960]]

編寫Python爬蟲很容易,不過要想安全地編寫Python爬蟲,就需要了解更多的至少,不光是技術上的,還有法律上的,Robots協議就是其中之一,如果不了解Robots協議,抓取了不該抓取的東西,可能會面臨牢獄之災哦!

1. Robots協議簡介

Robots協議也稱作爬蟲協議、機器人協議,它的全名是網絡爬蟲排除標準(Robots Exclusing Protocol),用來告訴爬蟲和搜索引擎哪些頁面可以抓取,哪些不可以抓取。該協議的內容通常放在一個名為robots.txt的文本文件中,該文件一般位于網站的根目錄下。

注意,robots.txt文件中的內容只是告訴爬蟲應該抓取什么,不應該抓取什么,但并不是通過技術手段阻止爬蟲抓取那些被禁止的資源,而只是通知爬蟲而已。盡管編寫爬蟲可以不遵循robots.txt文件的描述,但作為一只有道德、有文化、有紀律的爬蟲,應該盡量遵循robots.txt文件描述的規則。否則,有可能會引起法律糾紛。

當爬蟲訪問一個網站時,首先會檢查這個網址根目錄下是否存在robots.txt文件,如果存在,爬蟲就會根據該文件中定義的抓取范圍來抓取Web資源。如果這個文件并不存在,爬蟲就會抓取這個網站所有可直接訪問的頁面。下面來看一個robots.txt文件的例子:

  1. User-agent:* 
  2. Disallow:/ 
  3. Allow:/test/ 

這個抓取規則首先告訴爬蟲對所有的爬蟲有效,而且除了test目錄外的任何資源都不允許抓取。如果將這個robots.txt文件放在某個網站的根目錄,那么搜索引擎的爬蟲就會只抓取test目錄下的資源,我們會發現搜索引擎中再也查不到其他目錄下的資源了。

上面的User-agent描述了爬蟲的名字,這里將其設置為*,則表示對所有的爬蟲有效,我們還可以特指某些爬蟲,如下面的設置明確指定百度爬蟲。

  1. User-agent:BaiduSpider 

robots.txt文件中有2個重要的授權指令:Disallow和Allow,前者表示禁止抓取,后者表示運行抓取。也就是說,Disallow是黑名單,Allow是白名單。 例如,下面是一些Robots協議的例子。

1. 禁止所有爬蟲抓取網站所有的資源

  1. User-agent:* 
  2. Disallow:/ 

2. 禁止所有爬蟲抓取網站/private和/person目錄中的資源

  1. User-agent: * 
  2. Disallow: /private/ 
  3. Disallow:/person/ 

3. 只禁止百度爬蟲抓取網站資源

  1. User-agent:BaiduSpider 
  2. Disallow:/ 

很多搜索引擎的爬蟲都有特定的名稱,表1列出了一些常用的爬蟲名稱。

表1 常用的爬蟲名稱

爬蟲名稱
搜索引擎
網站
Googlebot
谷歌
www.google.com
BaiduSpider
百度
www.baidu.com
360Spider
360搜索
www.so.com
Bingbot
必應
www.bing.com

2. 分析Robots協議

Robots協議并不需要我們自己去分析,urllib庫的robotparser模塊提供了相應的API來解析robots.txt文件,這就是RobotFileParser類。可以用多種方式使用RobotFileParser類。例如,可以通過set_url方法設置robots.txt文件的URL,然后進行分析,代碼如下:

  1. form urllib.robotparser import RobotFileParser 
  2. robot = RobotFileParser() 
  3. robot.set_url('https://www.jd.com/robots.txt'
  4. robot.read() 
  5. print(robot.can_fetch('*','https://www.jd.com/test.js')) 

其中can_fetch方法用來獲得該網站某一個URL根據Robots協議是否有權抓取,如果可以抓取,返回True,否則返回False。

RobotFileParser類的構造方法也可以接受一個URL,然后使用can_fetch方法判斷是否可以抓取某一個頁面。

  1. robot = RobotFileParser('https://www.jd.com/robots.txt'
  2. print(robot.can_fetch('*','https://www.jd.com/test.js')) 

下面的案例使用了parse方法指定robots.txt文件的數據,并輸出不同的URL是否允許抓取,這是另外一種使用RobotFileParser類的方式。

  1. from urllib.robotparser import RobotFileParser 
  2. from urllib import request 
  3. robot = RobotFileParser() 
  4. url = 'https://www.jianshu.com/robots.txt' 
  5. headers = { 
  6.     'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
  7.     'Host''www.jianshu.com'
  8. req = request.Request(url=url, headers=headers) 
  9.   
  10. # 抓取robots.txt文件的內容,并提交給parse方法進行分析 
  11. robot.parse( request.urlopen(req).read().decode('utf-8').split('\n')) 
  12. # 輸出True 
  13. print(robot.can_fetch('*','https://www.jd.com')) 
  14. # 輸出True 
  15. print(robot.can_fetch('*','https://www.jianshu.com/p/92f6ac2c350f')) 
  16. # 輸出False 
  17. print(robot.can_fetch('*','https://www.jianshu.com/search?q=Python&page=1&type=note')) 

運行結果如下:

  1. True 
  2. True 
  3. False 

本文轉載自微信公眾號「極客起源」,可以通過以下二維碼關注。轉載本文請聯系極客起源公眾號。

 

責任編輯:武曉燕 來源: 極客起源
相關推薦

2021-05-07 06:15:32

編程開發端口掃描

2016-12-12 15:22:41

編程

2022-07-30 23:41:53

面向過程面向對象面向協議編程

2020-11-08 14:34:31

小視頻瀏覽器

2019-10-28 10:57:35

程序員監獄編程

2019-10-28 10:21:00

程序員網絡爬蟲數據

2018-05-10 13:45:15

Swift網絡層協議

2015-04-14 10:39:09

iWatch蘋果

2021-01-27 12:22:08

Python爬蟲代碼

2020-04-21 09:49:41

運維編程系統

2010-10-26 10:37:31

Java之父蘋果

2018-03-07 18:14:07

物聯網信息網絡

2013-06-13 08:58:02

iOS7WWDCDesign By C

2020-07-29 10:02:47

Java內存故障內存

2020-07-27 08:08:47

Java內存JVM

2021-04-07 17:06:55

String Final存儲

2021-06-03 08:55:58

面向協議編程

2015-04-13 10:32:32

2021-06-04 09:01:27

Cocoa 協議編程 Swift

2012-05-28 10:47:33

跳槽程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91欧美激情一区二区三区成人 | 日韩一二区 | 午夜天堂精品久久久久 | 日韩免费 | 久热伊人| 中文字幕亚洲精品 | 99久久精品免费看国产免费软件 | 国产精品五区 | 国产精品99久久久久久久久 | 亚洲成人精品视频 | 精品欧美乱码久久久久久1区2区 | 九九在线| 久久久久www | 日本精品视频 | 国产高清一区二区 | 91精品国产综合久久小仙女图片 | 一区二区三区亚洲 | 久久久久久国产 | 日本福利在线观看 | 久久久精品一区二区三区 | 亚洲欧洲一区二区 | 激情一区二区三区 | 日韩精品一区二区三区视频播放 | 美女日批免费视频 | 久久成人国产精品 | 麻豆精品国产免费 | 国产精品69毛片高清亚洲 | 欧美亚洲一区二区三区 | 粉嫩在线 | 中文字幕在线观看成人 | 国产激情在线观看 | 超碰成人免费观看 | 国产精品高清一区二区 | 一区二区三区视频免费观看 | 久久久久久毛片免费观看 | 亚洲高清在线 | 天堂一区在线观看 | 久热久草| 久久久精彩视频 | 亚洲一区二区不卡在线观看 | 亚洲精品视频导航 |