成人免费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:21:00

程序員網絡爬蟲數據

2019-10-28 10:57:35

程序員監獄編程

2018-05-10 13:45:15

Swift網絡層協議

2021-01-27 12:22:08

Python爬蟲代碼

2015-04-14 10:39:09

iWatch蘋果

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

2021-06-04 09:01:27

Cocoa 協議編程 Swift

2021-06-03 08:55:58

面向協議編程

2015-04-13 10:32:32

2020-07-29 10:02:47

Java內存故障內存

2020-07-27 08:08:47

Java內存JVM

2021-04-07 17:06:55

String Final存儲

2012-05-28 10:47:33

跳槽程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品毛片国产亚洲av十九禁 | 日韩欧美精品一区 | 天天操妹子 | 国产精品人人做人人爽 | 国产一区不卡 | 美日韩中文字幕 | 青草青草久热精品视频在线观看 | 亚洲视频手机在线 | 少妇午夜一级艳片欧美精品 | 韩日在线观看视频 | 欧美aⅴ片 | 国产精品视频一区二区三区 | 国产精品免费av | 欧美成视频 | 国产精品综合一区二区 | 亚洲精品在线观看视频 | 成人三级在线观看 | 日本精品一区二区三区在线观看 | 欧美日韩亚洲一区 | 一级在线视频 | 国产黄色在线观看 | 精品国模一区二区三区欧美 | 亚洲成人一级片 | 欧美一区二 | 一区二区三区国产 | 99精品免费 | 国产精品伦一区二区三级视频 | 国产成人精品av | 国产精品高潮呻吟久久久久 | 国产视频第一页 | 欧美色综合天天久久综合精品 | 国产美女高潮 | 久草精品视频 | 色综网| 久久免费精品视频 | 成人片免费看 | av资源在线看 | 国产一区二区三区 | 黄色毛片免费看 | 性做久久久久久免费观看欧美 | 欧美日韩成人影院 |