網絡爬蟲的實質,其實是從網絡上“偷”數據。通過網絡爬蟲,我們可以採集到所需要的資源,但是同樣,使用不當也可能會引發一些比較嚴重的問題。
因此,在使用網絡爬蟲時,我們需要做到“盜亦有道”。
網絡爬蟲主要分為以下三類:
小規模,數據量小,爬取速度不敏感;對於這類網絡爬蟲我們可以使用Requests庫來實現,主要用於爬取網頁;
中規模,數據規模較大,爬取速度敏感;對於這類網絡爬蟲我們可以使用Scrapy庫來實現,主要用於爬取網站或系列網站;
大規模,搜索引擎,爬取速度關鍵;此時需要定製開發,主要用於爬取全網,一般是建立全網搜索引擎,如百度、Google搜索等。
在這三種中,我們最為常見的是第一種,大多數均是小規模的爬取網頁的爬蟲。
對於網絡爬蟲,也有很多反對聲音。因為網絡爬蟲會不停的向服務器發出請求,影響服務器性能,對服務器產生騷擾行為,並加大了網站維護者的工作量。
除了對服務器的騷擾外,網絡爬蟲也有可能引發法律風險。因為服務器上的數據有產權歸屬,如果將該數據用於牟利的話,將會帶來法律風險。
此外,網絡爬蟲也可能會造成用戶的隱私洩露。
簡而言之,網路爬蟲的風險主要歸於以下三點:
對服務器的性能騷擾
內容層面的法律風險
個人隱私的洩露
因此,網絡爬蟲的使用需要有一定的規則。
在實際情況中,一些較大的網站都對網絡爬蟲進行了相關限制,整個互聯網上也將網絡爬蟲視為可規範的功能來看待。
對於一般的服務器來講,我們可以通過2種方式來限制網絡爬蟲:
- 如果網站的所有者有一定的技術能力,可以通過來源審查來限制網絡爬蟲。
來源審查,一般通過判斷User-Agent來進行限制,本篇文章著重介紹第2種。
- 通過Robots協議來告訴網絡爬蟲需要遵守的規則,哪些可以爬取,哪些是不允許的,並要求所有的爬蟲遵守該協議。
第2種是以公告的形式告知,Robots協議是建議但非約束性,網絡爬蟲可以不遵守,但可能會存在法律風險。通過這兩種方法,互聯網上形成了對網絡爬蟲的道德和技術上的有效限制。
那麼,我們在編寫網絡爬蟲時,就需要去尊重網站的維護人員對網站資源的管理。
互聯網上,部分網站沒有Robots協議,所有數據都可以爬取;不過,絕大多數的主流網站都支持Robots協議,有做相關限制,下面就具體介紹下Robots協議的基本語法。
Robots協議(Robots Exclusion Standard,網絡爬蟲排除標準):
作用:網站告知網絡爬蟲哪些頁面可以爬取,哪些不行。
形式:在網站根目錄下的robots.txt文件。
Robots協議的基本語法:*代表所有,/代表根目錄。
比如,PMCAFF的Robots協議
User-agent: * Disallow: /article/edit Disallow: /discuss/write Disallow: /discuss/edit
第1行中User-agent:*,是指所有的網絡爬蟲都需要遵守如下協議;
第2行中Disallow: /article/edit,是指所有的網絡爬蟲都不允許訪問article/edit下的內容,其他同理。
如果觀察京東的Robots協議,可以看到下面有User-agent: EtaoSpider,Disallow: /,其中EtaoSpider是惡意爬蟲,不允許其爬取京東的任何資源。
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: /
有了Robots協議後,可以對網站的內容做個規範,告訴所有的網絡爬蟲哪些可以爬取,哪些不允許。
需要特別注意的是,Robots協議都是存在根目錄下的,不同的根目錄可能Robots協議是不一樣的**,**在爬取時需要多加留意。
網絡爬蟲,“盜亦有道”。
參考資料:中國大學MOOC課程,Python網絡爬蟲與信息提取