(1).網路爬蟲引發的問題
網路爬蟲是乙個很有趣的功能,它既能獲得網路上的資源,但是它可以帶來很多很嚴重的問題。
我們現在常用的網路爬蟲,按尺寸劃分可以分為三大類。第一類是指以爬取網頁或者玩轉網頁為主的一類爬蟲,這類爬蟲規模很小,獲取網路的資料量也很小,它對爬取網頁的速度並不敏感,針對這一類的網路爬蟲我們就可以使用requests庫來實現它的功能。
第二類是指以爬取**或者爬取系列**為目的的一類爬蟲,這類爬蟲是中規模的爬蟲,它所對應的資料規模往往較大,而它對爬取速度也是很敏感的,否則可能還跟不上**的更新速度。所以在這種情況下我們要使用更專業的庫scrapy,這是python提供專門做爬取**這個級別的功能。
在我們所見到的網路爬蟲,那種小規模的、爬取網頁為主的爬蟲佔據了90%以上的比例。不要看這樣的爬蟲非常小,但是它針對特定的網頁,或者針對一系列網頁卻能夠發揮很大的作用。
對於網路爬蟲有很多不同的反對的聲音,因為網路爬蟲會帶來很多的問題。
對於伺服器來說,當在伺服器上執行了乙個**,那麼網路爬蟲就像騷擾**一樣,對這個**會帶來很致命的騷擾功能。因為架設的web伺服器預設只接受人類的訪問,預設是按照人數來約定它的訪問能力,而爬蟲跟人類所不同的是它能夠用計算機的快速功能去獲取相關的資源,速度比人類快百倍甚至千倍,當有爬蟲來伺服器爬取相關的內容,每秒爬取十萬次甚至幾十萬次的情況下,伺服器是很難提供那麼高的效能。因此對於某些爬蟲,受限於編寫者的水平和它的目的,這樣爬蟲會為web伺服器帶來巨大的資源開銷,從而對**的執行者來講,爬蟲形成了騷擾。
此外,網路爬蟲還給個人帶來很大的隱私洩露的風險。舉個例子,使用者能夠在**上放很多的個人**,通過簡單的密碼或簡單的目錄保護方式來防止**被其他使用者通過網頁瀏覽的方式獲得,但是網路爬蟲具備一定的突破能力,它能夠破解一些簡單的訪問控制,甚至能夠對那些外部使用者很難找到的鏈結進行爬取,從而獲得相關的資料,而獲得的資料又是個人隱私的資料,那麼就能把使用者的隱私洩露出去。
以上就是網路爬蟲引發的最為突出的三個問題,分別是對伺服器效能的騷擾問題、內容層面的法律風險問題以及個人隱私的洩露問題,因此網路爬蟲的使用是要有它的規則。
在實際的使用過程中,一些較大的**都對網路爬蟲有相關的限制。而整個internet上,也將網路爬蟲當作乙個可規範的功能來看待。對於一般的伺服器來講,我們可以用兩種方式來限制網路爬蟲。這兩種方法分別從技術和道德方面來限制網路爬蟲。
第一種方法:如果伺服器的所有者有一定的技術能力,他可以通過**審查來限制網路爬蟲。**審查方法比較簡單,它首先判斷所有請求往鏈結的http頭部,找到user-agent欄位。我們知道在進行http訪問的時候,無論是瀏覽器還是訪問的軟體,它都會把它自己設定乙個標識放到user-agent裡。那麼對**伺服器來說,它要判斷http的協議頭,如果user-agent欄位不是預定的瀏覽器或不是已知的瀏覽器,那它很有可能是乙個爬蟲,所以我們可以通過限制特定的user-agent欄位的協議頭來限制網路爬蟲。簡單說,作為**的維護者可以只響應瀏覽器或者那些已知的友好爬蟲訪問。
第二種方法:也可以通過發布公告的方法來限制網路爬蟲,也就是所謂的robots協議。這個方法有點想乙個告示牌,也就是說告訴所有的爬蟲當前**可爬取的策略,並要求所有爬蟲遵守,比如**可以告訴爬蟲哪些內容是可以爬取的,哪些內容是不可以爬取的。發布公告形式僅僅是通過發布來體現,至於是否遵守是由網路爬蟲自身來決定的。
(2).robots協議
robots協議實際上全稱是robots exclusion standard,中文名為網路爬蟲排除標準。robots協議乙個很重要的作用就是**告知網路爬蟲哪些頁面可以抓取,哪些不行。它的具體使用形式(方法)是在**根目錄下放置乙個robots.txt檔案,在這個檔案中寫明當前**裡哪些目錄是允許爬蟲去爬取,哪些目錄是不允許。
robots協議通過了乙個基本語法來告知所有的爬蟲,**內部資源能夠被訪問的許可權,這個語法就是user-agent和disallow,user-agent表明的是哪些爬蟲,如果想代表所有爬蟲就用*,disallow代表的是不允許這個爬蟲訪問的資源的目錄。有了這樣的乙個基本協議就可以對整個**的內容做乙個相關的規範,使得爬蟲知道它可以訪問**,不可以訪問**。
robots協議規定如果乙個**不提供robots.txt檔案,那麼就說明這個**允許所有爬蟲無限制的爬取所有內容。
(3).robots協議的遵守方式
對於任何網路爬蟲來講,它應該能夠自動或人工的識別robots.txt檔案,根據檔案的內容再進行爬取。如果不會寫自動識別robots.txt檔案的**,我們可以開啟某乙個**看一下它的robots協議,根據**的規則來進行合理的爬取。
然而robots協議是建議但非約束性的,也就是說網路爬蟲可以不遵守但存在法律風險。以下也給出了一些建議:
當然也有例外,那就是類人行為可以不參考robots協議,如果網路爬蟲能夠和人類獲取相關資訊相一致,也就是說訪問的次數很少,每次訪問的內容也不大,這種情況下雨澤上可以不遵守robots協議。
Python網路爬蟲(二) 問題與規則
web伺服器預設接收人類訪問 受限於編寫水平和目的,網路爬蟲將會為web伺服器帶來巨大的資源開銷 伺服器上的資料有產權歸屬 網路爬蟲獲取資料後牟利將帶來法律風險 網路爬蟲可能具備突破簡單訪問控制的能力,獲得被保護資料從而洩露個人隱私 發布公告 robots協議 robots exclusion st...
Python 網路爬蟲之BeautifulSoup
在上一節記錄了如何使用urllib進行網路爬蟲,並將資料儲存。但是我當時是使用的正規表示式進行的資料過濾,有些不全面。接下來我將記錄一種更加方便的解析資料的操作 beautifulsoup 安裝beautifulsoup4 導包import urllib.request from bs4 impor...
Python之網路爬蟲(1)
將 中所有的出版社資訊都爬取出來。如下 可以看到,網頁中有許多的出版社。下面我們用 將所有出版社的名字爬取出來,並儲存在檔案中。import urllib.request import re url data urllib.request.urlopen url read data data.dec...