python 網路爬蟲的Robots協議
網路爬蟲的尺寸大致分為3種:
而第一種大致佔到了90%。由於網路爬蟲的存在,伺服器會因為網路爬蟲造成很大的資源開銷,比如一個普通人一定時間內訪問上十次,而爬蟲可能會訪問十萬次或者百萬次。如果一個伺服器效能較差,可能會承受不來這個規模的訪問。因此網路上對爬蟲有一定的制約,對於一些不友好的爬蟲,甚至可能會涉及到觸犯到法律。
現在一般的網站都會對爬蟲做出限制,大致分為兩種:
現在說一下第二種,Robots(Robots Exclusion Standard )協議,也叫機器人協議。
作用:告知爬蟲網頁上哪些內容可以爬取,哪些不行。
形式:在網站根目錄下放置robots.txt檔案。
比如我們用程式碼去獲取京東的robots協議:
import requests def getHTTPXML( url ): try: r = requests.get(url, timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "產生異常" if __name__=="__main__": url = "http://www.jd.com/robots.txt" print(getHTTPXML(url))
爬取下來的robots協議為:
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
它是什麼意思呢,我們來分析一下。
第一行*表示所有的,也就是說,對於所有的網路爬蟲,它都定義為User-agent
意思就是說對於所有的網路爬蟲,都應該遵守這個協議。
第二行什麼意思呢?disallow表示不允許,?後面是*,表示?後面所有的東西,也就是說,它不允許任何爬蟲訪問任何以?開頭的路徑。
第三行表示任何爬蟲都不允許訪問pop/開頭的路徑。
第四行同理,符合這類的路徑也不允許訪問。
後面的又寫了四個爬蟲,EtaoSpider等等
他們被禁止的是根目錄。這四種爬蟲不允許爬取京東的任何資源。
也就是說這四種爬蟲被京東定義為惡意爬蟲,非法的獲取過京東的資源,所以京東不允許這四類爬蟲獲取京東的任何資源了。
對於不遵守robots協議的爬蟲,可能會存在法律風險。
所以大家也看到了,robots協議就是通過User-agent 和 disallow這兩個基本語法來告知所有爬蟲它內部能訪問的許可權。
有了這個的話,就相當於告知所有爬蟲應該去遵守這個網站的規範,相當於制定了一個準則。
不同的網站會有不同的robots協議,我們也可以看看其他網站的robots協議。
來看一下百度的robots協議:
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: MSNBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Baiduspider-image
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: YoudaoBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou web spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou inst spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou spider2
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou blog
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou News Spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou Orion spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: ChinasoSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sosospider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: yisouspider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: EasouSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: *
Disallow: /
qq的robots協議:
User-agent: *
Disallow:
Sitemap: http://www.qq.com/sitemap_index.xml
新浪新聞的robots協議:
User-agent: *
Disallow: /wap/
Disallow: /iframe/
Disallow: /temp/
不是所有網站都有robots協議,比如國家教育部的網站就沒有robots協議,它就預設為所有網路爬蟲都可以無限制的去爬取這個網站。