網(wǎng)絡(luò)爬蟲的尺寸
爬取網(wǎng)頁:小規(guī)模、數(shù)據(jù)量小怜庸,爬取速度不敏感(requests庫)馏鹤,使用率占據(jù)大于 90%
爬取網(wǎng)站:中規(guī)模,數(shù)據(jù)量較大款侵,爬取速度敏感(scrapy庫)
爬取全網(wǎng):大規(guī)模末荐,搜索引擎,爬取速度關(guān)鍵(定制開發(fā))
網(wǎng)絡(luò)爬蟲引發(fā)的問題
性能騷擾
法律風(fēng)險(xiǎn)
隱私泄露
網(wǎng)絡(luò)爬蟲的"性能騷擾"
web服務(wù)器默認(rèn)接受人類訪問新锈,受限于編寫水平和目的甲脏,網(wǎng)絡(luò)爬蟲將會(huì)為web服務(wù)器帶來巨大的資源的開銷。
網(wǎng)絡(luò)爬蟲的法律風(fēng)險(xiǎn)
服務(wù)器上的數(shù)據(jù)有產(chǎn)權(quán)歸屬妹笆,網(wǎng)絡(luò)爬蟲獲取數(shù)據(jù)后牟利將會(huì)帶來法律的風(fēng)險(xiǎn)块请。
網(wǎng)絡(luò)爬蟲的隱私泄露
網(wǎng)絡(luò)爬蟲可能具備突破簡(jiǎn)單訪問的控制能力,獲取被保護(hù)的數(shù)據(jù)拳缠,從而泄露個(gè)人隱私墩新。
網(wǎng)絡(luò)爬蟲的限制
來源審查:判斷User-Agent進(jìn)行限制,檢查來訪者HTTP協(xié)議頭的User-Agent域窟坐,只響應(yīng)瀏覽器或友好爬蟲的訪問
發(fā)布公告:Robots協(xié)議海渊, 告知所有的爬蟲網(wǎng)站的爬蟲策略,要求爬蟲遵守狸涌。
Robots協(xié)議
Robots協(xié)議(也稱為爬蟲協(xié)議切省、機(jī)器人協(xié)議等)的全稱是“網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(Robots ExclusionProtocol),網(wǎng)站通過Robots協(xié)議告訴搜索引擎哪些頁面可以抓取帕胆,哪些頁面不能抓取朝捆。
根據(jù)協(xié)議,網(wǎng)站管理員可以在網(wǎng)站域名的根目錄下放一個(gè)robots.txt 文本文件懒豹,里面可以指定不同的網(wǎng)絡(luò)爬蟲能訪問的頁面和禁止訪問的頁面芙盘,指定的頁面由 正則表達(dá)式 表示驯用。網(wǎng)絡(luò)爬蟲在采集這個(gè)網(wǎng)站之前,首先獲取到這個(gè)文件儒老,然后解析到其中的規(guī)則蝴乔,然后根據(jù)規(guī)則來采集網(wǎng)站的數(shù)據(jù)。
注意驮樊,這個(gè)協(xié)議的存在更多的是需要網(wǎng)絡(luò)爬蟲去遵守薇正,而起不到防止爬蟲的功能。
為什么需要Robots協(xié)議
互聯(lián)網(wǎng)上的網(wǎng)頁是通過超級(jí)鏈接互相關(guān)聯(lián)起來的囚衔,從而形成了網(wǎng)頁的網(wǎng)狀結(jié)構(gòu)挖腰。爬蟲的工作方式就像蜘蛛在網(wǎng)上沿著鏈接爬來爬去,最基本的 流程 可以簡(jiǎn)化如下:
喂給爬蟲一堆url练湿,我們稱之為 種子(seeds)猴仑;
爬蟲抓取seeds,解析html網(wǎng)頁肥哎,抽取其中的超級(jí)鏈接辽俗;
爬蟲接著抓取這些新發(fā)現(xiàn)的鏈接指向的網(wǎng)頁。
步驟2和步驟3循環(huán)往復(fù)篡诽。
了解了上面的流程就能發(fā)現(xiàn):對(duì)爬蟲來說網(wǎng)站非常 被動(dòng) 崖飘,只有老老實(shí)實(shí)被抓取的份。
所以霞捡,對(duì)于網(wǎng)站的管理者來說坐漏,就存在這樣的需求:
某些路徑下是個(gè)人隱私或者網(wǎng)站管理使用,不想被搜索引擎抓取碧信,比如說 日本愛情動(dòng)作片 ;
不喜歡某個(gè)搜索引擎街夭,不愿意被他抓取砰碴,最有名的就是之前 淘寶不希望被百度抓取 ;
小網(wǎng)站使用的是公用的虛擬主機(jī)板丽,流量有限或者需要付費(fèi)呈枉,希望搜索引擎抓的溫柔點(diǎn);
某些網(wǎng)頁是動(dòng)態(tài)生成的埃碱,沒有直接的鏈接指向猖辫,但是希望內(nèi)容被搜索引擎抓取和索引。
網(wǎng)站內(nèi)容的所有者是網(wǎng)站管理員砚殿,搜索引擎應(yīng)該尊重所有者的意愿啃憎,為了滿足以上等等,就需要提供一種網(wǎng)站和爬蟲進(jìn)行溝通的途徑似炎,給網(wǎng)站管理員表達(dá)自己意愿的機(jī)會(huì)辛萍。有需求就有供應(yīng)悯姊,robots協(xié)議 就此誕生。
案例
京東的Robots協(xié)議
https://www.jd.com/robots.txt
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協(xié)議
https://www.baidu.com/robots.txt
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: MSNBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Baiduspider-image
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: YoudaoBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou web spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou inst spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou spider2
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou blog
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou News Spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sogou Orion spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: ChinasoSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: Sosospider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: yisouspider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: EasouSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
User-agent: *
Disallow: /
上面贩毕,*代表所有悯许,/代表根目錄
Robots協(xié)議的寫法
既然網(wǎng)絡(luò)爬蟲在爬取一個(gè)網(wǎng)站之前,要先獲取到這個(gè)文件辉阶,然后解析到其中的規(guī)則先壕,那么,Robots就必須要有一套通用的語法規(guī)則谆甜。
最簡(jiǎn)單的robots.txt只有兩條規(guī)則:
User-agent:指定對(duì)哪些爬蟲生效
Disallow:指定要屏蔽的網(wǎng)址
先說User-agent启上,爬蟲抓取時(shí)會(huì)聲明自己的身份,這就是User-agent店印,沒錯(cuò)冈在,就是http協(xié)議里的User-agent。robots.txt利用User-agent來區(qū)分各個(gè)引擎的爬蟲按摘,比如說google網(wǎng)頁搜索爬蟲的User-agent為Googlebot包券。
可能有讀者要問了,我怎么知道爬蟲的User-agent是什么?你還可以查 相關(guān)搜索引擎的資料 得到官方的數(shù)據(jù)炫贤,比如說百度的爬蟲列表是這樣的:
產(chǎn)品名稱對(duì)應(yīng)User-Agent
網(wǎng)頁搜索Baiduspider
移動(dòng)搜索Baiduspider
圖片搜索Baiduspider-image
視頻搜索Baiduspider-video
新聞搜索Baiduspider-news
百度搜索Baiduspider-favo
百度聯(lián)盟Baiduspider-cpro
商務(wù)搜索Baiduspider-ads
Disallow 行列出的是要攔截的網(wǎng)頁溅固,以正斜線 (/) 開頭,可以列出特定的網(wǎng)址或模式兰珍。要屏蔽整個(gè)網(wǎng)站侍郭,使用正斜線即可;要屏蔽某一目錄以及其中的所有內(nèi)容,在目錄名后添加正斜線;要屏蔽某個(gè)具體的網(wǎng)頁掠河,就指出這個(gè)網(wǎng)頁亮元。
下面介紹一些實(shí)例:
允許所有的robot訪問
User-agent: *
Disallow:
或者也可以建一個(gè)空文件 "/robots.txt" file。
禁止爬蟲訪問所有目錄
User-agent: *
Disallow: /
禁止爬蟲訪問某些目錄
User-agent: *
Disallow: /a/
Disallow: /b/
Disallow: /c/
禁止某些爬蟲訪問
User-agent: BadBot
Disallow: /
只允許某個(gè)爬蟲訪問
User-agent: MangCrawler
Disallow:
User-agent: *
Disallow: /
我們?cè)賮斫Y(jié)合兩個(gè)真實(shí)的范例來學(xué)習(xí)一下唠摹。先看這個(gè)例子:
User-agent: Baiduspider
Disallow: /
User-agent: baiduspider
Disallow: /
這個(gè)是淘寶網(wǎng)的Robots協(xié)議內(nèi)容爆捞,相信你已經(jīng)看出來了,淘寶網(wǎng)禁止百度的爬蟲訪問勾拉。
再來看一個(gè)例子:
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
User-agent: EtaoSpider
Disallow: /
這個(gè)稍微復(fù)雜點(diǎn)煮甥,京東有2個(gè)目錄不希望所有的爬蟲來抓。同時(shí)藕赞,京東完全屏蔽了一淘網(wǎng)的蜘蛛(EtaoSpider是一淘網(wǎng)的蜘蛛)成肘。
Robots協(xié)議進(jìn)階知識(shí)
sitemap
爬蟲會(huì)通過網(wǎng)頁內(nèi)部的鏈接發(fā)現(xiàn)新的網(wǎng)頁。但是如果沒有鏈接指向的網(wǎng)頁怎么辦?或者用戶輸入條件生成的動(dòng)態(tài)網(wǎng)頁怎么辦?能否讓網(wǎng)站管理員通知搜索引擎他們網(wǎng)站上有哪些可供抓取的網(wǎng)頁?這就是sitemap斧蜕,最簡(jiǎn)單的 Sitepmap 形式就是 XML 文件双霍,在其中列出網(wǎng)站中的網(wǎng)址以及關(guān)于每個(gè)網(wǎng)址的其他數(shù)據(jù)(上次更新的時(shí)間、更改的頻率以及相對(duì)于網(wǎng)站上其他網(wǎng)址的重要程度等等),利用這些信息搜索引擎可以更加智能地抓取網(wǎng)站內(nèi)容店煞。
新的問題 來了蟹演,爬蟲怎么知道這個(gè)網(wǎng)站有沒有提供sitemap文件,或者說網(wǎng)站管理員生成了sitemap顷蟀,(可能是多個(gè)文件)酒请,爬蟲怎么知道放在哪里呢?
由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里鸣个。這就成為robots.txt里的新成員了羞反。
節(jié)選一段google robots.txt:
Sitemap: http://www.gstatic.com/cultur...
Sitemap: http://www.google.com/hostedn...
插一句,考慮到一個(gè)網(wǎng)站的網(wǎng)頁眾多囤萤,sitemap人工維護(hù)不太靠譜昼窗,google提供了工具可以自動(dòng)生成sitemap。
meta tag
其實(shí)嚴(yán)格來說這部分內(nèi)容不屬于robots.txt涛舍。
robots.txt的初衷是為了讓網(wǎng)站管理員管理可以出現(xiàn)在搜索引擎里的網(wǎng)站內(nèi)容澄惊。但是,即使使用 robots.txt文件讓爬蟲無法抓取這些內(nèi)容富雅,搜索引擎也可以通過其他方式找到這些網(wǎng)頁并將它添加到索引中掸驱。例如,其他網(wǎng)站仍可能鏈接到該網(wǎng)站没佑。因此毕贼,網(wǎng)頁網(wǎng)址及其他公開的信息(如指向相關(guān)網(wǎng)站的鏈接中的定位文字或開放式目錄管理系統(tǒng)中的標(biāo)題)有可能會(huì)出現(xiàn)在引擎的搜索結(jié)果中。如果想徹底對(duì)搜索引擎 隱身 那咋整呢?答案是:元標(biāo)記蛤奢,即meta tag鬼癣。
比如要完全阻止一個(gè)網(wǎng)頁的內(nèi)容列在搜索引擎索引中(即使有其他網(wǎng)站鏈接到此網(wǎng)頁),可使用 noindex 元標(biāo)記啤贩。只要搜索引擎查看該網(wǎng)頁待秃,便會(huì)看到 noindex 元標(biāo)記并阻止該網(wǎng)頁顯示在索引中,這里注意 noindex 元標(biāo)記提供的是一種逐頁控制對(duì)網(wǎng)站的訪問的方式瓜晤。
要防止所有搜索引擎將網(wǎng)站中的網(wǎng)頁編入索引锥余,在網(wǎng)頁的部分添加:
<meta name="robots" content="noindex">
這里的 name取值 可以設(shè)置為某個(gè)搜索引擎的 User-agent 從而指定屏蔽某一個(gè)搜索引擎。
除了noindex外痢掠,還有其他元標(biāo)記,比如說nofollow嘲恍,禁止爬蟲從此頁面中跟蹤鏈接足画。詳細(xì)信息可以參考Google支持的元標(biāo)記,這里提一句:noindex和nofollow在 HTML4.01規(guī)范 里有描述佃牛,但是其他tag的在不同引擎支持到什么程度各不相同淹辞,還請(qǐng)讀者自行查閱各個(gè)引擎的說明文檔。
Crawl-delay
除了控制哪些可以抓哪些不能抓之外俘侠,robots.txt還可以用來控制爬蟲抓取的速率象缀。如何做到的呢?通過設(shè)置爬蟲在兩次抓取之間等待的秒數(shù)蔬将。這種操作可以進(jìn)行緩解服務(wù)器壓力。
Crawl-delay:5
表示本次抓取后下一次抓取前需要等待5秒央星。
注意:google已經(jīng)不支持這種方式了霞怀,在webmaster tools里提供了一個(gè)功能可以更直觀的控制抓取速率。
這里插一句題外話莉给,幾年前曾經(jīng)有一段時(shí)間robots.txt還支持復(fù)雜的參數(shù):Visit-time毙石,只有在visit-time指定的時(shí)間段里,爬蟲才可以訪問;Request-rate:用來限制URL的讀取頻率颓遏,用于控制不同的時(shí)間段采用不同的抓取速率徐矩。后來估計(jì)支持的人太少,就漸漸的廢掉了叁幢,目前google和baidu都已經(jīng)不支持這個(gè)規(guī)則了滤灯,其他小的引擎公司貌似 從來都 沒有支持過。
Robots協(xié)議的遵守方式
網(wǎng)絡(luò)爬蟲:
自動(dòng)或人工識(shí)別robots.txt曼玩,再進(jìn)行內(nèi)容爬取
約束性:
Robots協(xié)議是建議但非約束性鳞骤,網(wǎng)絡(luò)爬蟲可以不遵守,但存在法律風(fēng)險(xiǎn)演训。
對(duì)Robots協(xié)議的理解
原則:類人行為可以不參考Robots協(xié)議弟孟。
防君子不防小人(君子協(xié)議)
Robots協(xié)議不是什么技術(shù)壁壘,而只是一種互相尊重的協(xié)議样悟,好比私家花園的門口掛著“閑人免進(jìn)”拂募,尊重者繞道而行,不尊重者依然可以推門而入窟她。目前陈症,Robots協(xié)議在實(shí)際使用中,還存在一些問題震糖。
緩存
robots.txt本身也是需要被抓取的录肯,出于效率考慮,一般爬蟲不會(huì)每次抓取網(wǎng)站網(wǎng)頁前都抓一下robots.txt吊说,加上robots.txt更新不頻繁论咏,內(nèi)容需要解析。通常爬蟲的做法是先抓取一次颁井,解析后緩存下來厅贪,而且是相當(dāng)長(zhǎng)的時(shí)間。假設(shè)網(wǎng)站管理員更新了robots.txt雅宾,修改了某些規(guī)則养涮,但是對(duì)爬蟲來說并不會(huì)立刻生效,只有當(dāng)爬蟲下次抓取robots.txt之后才能看到最新的內(nèi)容。尷尬的是贯吓,爬蟲下次抓取robots.txt的時(shí)間并不是由網(wǎng)站管理員控制的懈凹。當(dāng)然,有些搜索引擎提供了web工具可以讓網(wǎng)站管理員通知搜索引擎那個(gè)url發(fā)生了變化悄谐,建議重新抓取介评。注意,此處是建議尊沸,即使你通知了搜索引擎威沫,搜索引擎何時(shí)抓取仍然是不確定的,只是比完全不通知要好點(diǎn)洼专。至于好多少棒掠,那就看搜索引擎的良心和技術(shù)能力了。
ignore
不知是無意還是有意屁商,反正有些爬蟲不太遵守或者完全忽略robots.txt烟很,不排除開發(fā)人員能力的問題,比如說根本不知道robots.txt蜡镶。另外雾袱,本身robots.txt不是一種強(qiáng)制措施,如果網(wǎng)站有數(shù)據(jù)需要保密官还,必需采取技術(shù)措施芹橡,比如說:用戶驗(yàn)證,加密望伦,ip攔截林说,訪問頻率控制等。
惡意爬蟲
在互聯(lián)網(wǎng)世界中屯伞,每天都有不計(jì)其數(shù)的爬蟲在日夜不息地爬取數(shù)據(jù)腿箩,其中惡意爬蟲的數(shù)量甚至高于非惡意爬蟲。遵守Robots協(xié)議的爬蟲才是好爬蟲劣摇,但是并不是每個(gè)爬蟲都會(huì)主動(dòng)遵守Robots協(xié)議珠移。
惡意爬蟲可以帶來很多潛在威脅,比如電商網(wǎng)站的商品信息被爬取可能會(huì)被競(jìng)爭(zhēng)對(duì)手利用末融,過多的爬蟲還會(huì)占用帶寬資源钧惧、甚至導(dǎo)致網(wǎng)站宕機(jī)。
你學(xué)會(huì)了嗎~~~勾习?
點(diǎn)個(gè)贊吧9敢摇!语卤!