一.導(dǎo)言
萬維網(wǎng)上有無數(shù)的網(wǎng)頁,其中包含了大量的信息。有時(shí)我們需要從一些網(wǎng)站上提取有趣且有價(jià)值的內(nèi)容。但是無法點(diǎn)擊網(wǎng)頁手動(dòng)復(fù)制粘貼。我們需要一個(gè)能夠自動(dòng)獲取網(wǎng)頁內(nèi)容,并按照指定的規(guī)則提取相應(yīng)內(nèi)容的程序,這個(gè)程序叫做爬蟲。
網(wǎng)絡(luò)爬蟲的本質(zhì)是http請(qǐng)求,瀏覽器是用戶主動(dòng)操作然后完成http請(qǐng)求,而爬蟲需要自動(dòng)完成HTTP請(qǐng)求,網(wǎng)絡(luò)爬蟲需要一個(gè)完整的框架來完成工作。
一般來說,一個(gè)完整的爬蟲生命周期包括URL管理、頁面下載、內(nèi)容提取和持久化。
網(wǎng)址管理
首先,url管理器向待爬集添加新的url,判斷待添加的url是否在容器中,獲取待爬的url,并將該url從待爬集移動(dòng)到已爬集。
頁面下載
下載器將接收到的url傳輸?shù)交ヂ?lián)網(wǎng),互聯(lián)網(wǎng)將html文件返回給下載器,下載器本地保存。一般下載器會(huì)分布式,一個(gè)是提交效率,一個(gè)是充當(dāng)請(qǐng)求代理。
內(nèi)容提取
頁面解析器的主要任務(wù)是從獲得的html網(wǎng)頁字符串中獲取有價(jià)值的有趣數(shù)據(jù)和新的url列表。常見的數(shù)據(jù)提取方法包括基于css選擇器的規(guī)則提取、正則表達(dá)式和xpath。通常,在提取之后,數(shù)據(jù)將被清理或定制,以將所請(qǐng)求的非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換成我們需要的結(jié)構(gòu)化數(shù)據(jù)。
數(shù)據(jù)持久性
相關(guān)數(shù)據(jù)庫、隊(duì)列、文件等的數(shù)據(jù)持久性。便于數(shù)據(jù)計(jì)算和應(yīng)用對(duì)接。
二.爬行動(dòng)物分類學(xué)
Web爬蟲一般按照實(shí)現(xiàn)的技術(shù)和結(jié)構(gòu)分為一般web爬蟲和聚焦web爬蟲。特征方面,也有增量web爬蟲和深度web爬蟲。在實(shí)際的網(wǎng)絡(luò)爬蟲中,它們通常是這幾種爬蟲的組合。
通用網(wǎng)絡(luò)爬蟲
通用網(wǎng)絡(luò)爬蟲。一般的網(wǎng)絡(luò)爬蟲也叫全網(wǎng)爬蟲。顧名思義,一般網(wǎng)絡(luò)爬蟲抓取的目標(biāo)資源在整個(gè)互聯(lián)網(wǎng)中。一般網(wǎng)絡(luò)爬蟲抓取的目標(biāo)數(shù)據(jù)龐大,抓取范圍也很大。正是因?yàn)榕佬袛?shù)據(jù)是海量數(shù)據(jù),所以這類爬蟲的爬行性能非常高。這種網(wǎng)絡(luò)爬蟲主要用于大型搜索引擎,具有很高的應(yīng)用價(jià)值。
通用網(wǎng)絡(luò)爬蟲主要由初始URL集、URL隊(duì)列、頁面抓取模塊、頁面分析模塊、頁面數(shù)據(jù)庫、鏈接過濾模塊等組成。一般的網(wǎng)絡(luò)爬蟲在爬行時(shí)會(huì)采用一定的爬行策略,包括深度優(yōu)先爬行策略和廣度優(yōu)先爬行策略。
關(guān)注網(wǎng)絡(luò)爬蟲
聚焦爬蟲也稱為主題爬蟲。顧名思義,聚焦爬蟲是根據(jù)預(yù)定義的主題有選擇地抓取網(wǎng)頁的爬蟲。與一般的爬蟲不同,聚焦爬蟲將目標(biāo)網(wǎng)頁定位在與主題相關(guān)的頁面中,而不是整個(gè)互聯(lián)網(wǎng)。這時(shí)候可以大大節(jié)省爬行所需的帶寬資源和服務(wù)器資源。聚焦Web爬蟲主要用于抓取特定信息,主要為特定人群提供服務(wù)。
聚焦網(wǎng)絡(luò)爬蟲主要由初始URL集、URL隊(duì)列、頁面抓取模塊、頁面分析模塊、頁面數(shù)據(jù)庫、鏈接過濾模塊、內(nèi)容評(píng)估模塊、鏈接評(píng)估模塊等組成。內(nèi)容評(píng)估模塊可以評(píng)估內(nèi)容的重要性。同樣,鏈接評(píng)估模塊也可以評(píng)估鏈接的重要性,然后根據(jù)鏈接和內(nèi)容的重要性,先訪問哪些頁面。
增量網(wǎng)絡(luò)爬蟲
增量網(wǎng)絡(luò)爬蟲,稱為增量,對(duì)應(yīng)于增量更新。增量更新意味著只更新已更改的位置,而不更新未更改的位置。因此,在對(duì)網(wǎng)頁進(jìn)行爬網(wǎng)時(shí),增量web爬網(wǎng)程序只會(huì)對(duì)內(nèi)容已更改的網(wǎng)頁或新生成的網(wǎng)頁進(jìn)行爬網(wǎng),而不會(huì)對(duì)內(nèi)容未更改的網(wǎng)頁進(jìn)行爬網(wǎng)。增量web爬蟲可以在一定程度上保證被抓取的頁面盡可能的新。
深度網(wǎng)絡(luò)爬蟲
深度網(wǎng)絡(luò)爬蟲(Deep Web Crawler),常規(guī)的網(wǎng)絡(luò)爬蟲在運(yùn)行中無法發(fā)現(xiàn)隱藏在普通網(wǎng)頁中的信息和規(guī)則,缺乏一定的主動(dòng)性和智能性。深度網(wǎng)絡(luò)爬蟲可以捕獲深度網(wǎng)頁的數(shù)據(jù)。一般網(wǎng)頁分為表層網(wǎng)頁和深層網(wǎng)頁。表層頁面是指?jìng)鹘y(tǒng)搜索引擎可以索引的頁面,而深層頁面只有用戶提交一些關(guān)鍵詞才能獲得。例如,那些內(nèi)容在用戶注冊(cè)后可見的頁面屬于深度頁面。
3.爬行動(dòng)物和反爬行動(dòng)物
爬蟲的目的是自動(dòng)從目標(biāo)網(wǎng)頁獲取數(shù)據(jù),但這種行為會(huì)對(duì)目標(biāo)站點(diǎn)造成一定的壓力,對(duì)方一般會(huì)有反抓取的手段來保護(hù)站點(diǎn)性能或數(shù)據(jù)。因此,在爬行動(dòng)物的發(fā)展過程中,應(yīng)該考慮反爬行。
在爬蟲開發(fā)過程中,分布式(代理IP)、異步數(shù)據(jù)解析(內(nèi)置瀏覽器內(nèi)核)、光學(xué)圖像識(shí)別、模擬驗(yàn)證(模擬請(qǐng)求頭、用戶代理、令牌)等手段是常見的。Web爬蟲會(huì)給Web服務(wù)器帶來巨大的資源開銷。當(dāng)我們寫的爬蟲數(shù)據(jù)不能給我們帶來價(jià)值的時(shí)候,我們應(yīng)該停止不必要的網(wǎng)絡(luò)請(qǐng)求,減少對(duì)互聯(lián)網(wǎng)的干擾。
一般情況下,站點(diǎn)反抓取會(huì)考慮后臺(tái)訪問的統(tǒng)計(jì),攔截單個(gè)IP、Session、單個(gè)用戶-代理訪問超過閾值或缺失Referer、Robots協(xié)議、異步數(shù)據(jù)加載、頁面動(dòng)態(tài)、請(qǐng)求驗(yàn)證攔截等請(qǐng)求。高端反爬包括混淆、代碼不穩(wěn)定、給假數(shù)據(jù)(中毒)、行為分析、假鏈陷阱、字符轉(zhuǎn)圖片等等。一般反爬蟲策略多用于較低級(jí)別的爬蟲,不管服務(wù)器壓力如何,保持訪問簡(jiǎn)單粗暴,另一種是失控或被遺忘的爬蟲,一般需要第一時(shí)間屏蔽。
鑒于爬蟲抓取的數(shù)據(jù)是目標(biāo)網(wǎng)站在互聯(lián)網(wǎng)上發(fā)布的公開數(shù)據(jù),理論上不可能完全停止爬蟲。站點(diǎn)能做的就是增加爬蟲的爬行難度,增加爬蟲的開發(fā)成本,以至于退卻。爬蟲越高級(jí)越難被屏蔽,相應(yīng)的高級(jí)爬蟲開發(fā)成本也越高。在攔截高級(jí)爬蟲時(shí),如果成本高到一定程度,爬蟲不會(huì)給自身帶來很大的性能壓力和數(shù)據(jù)威脅,那么就沒有必要繼續(xù)提高成本和對(duì)抗爬蟲。目前,大多數(shù)熱門網(wǎng)站在與爬行動(dòng)物的游戲中,在爬行動(dòng)物和反爬行動(dòng)物之間保持平衡。畢竟雙方都是想在商業(yè)市場(chǎng)上獲取利益,而不是不計(jì)代價(jià)的互相殘殺。
文字/暴民馬博
ShareSDK輕松實(shí)現(xiàn)社交功能,以其強(qiáng)大的App社交分享功能而被開發(fā)者熟知和好評(píng);
SMSSDK可以快速集成短信驗(yàn)證功能,幫助開發(fā)者打通手機(jī)通訊錄好友的社交圈;
MobLink打破了App孤島,實(shí)現(xiàn)了Web和App的無縫鏈接。新用戶第一次打開App時(shí),大大提高了用戶轉(zhuǎn)化率;
Mob統(tǒng)計(jì)分析采用數(shù)據(jù)驅(qū)動(dòng)產(chǎn)品,精準(zhǔn)行為分析+多維數(shù)據(jù)模型+匹配全網(wǎng)標(biāo)簽+垂直行業(yè)分析顧問;
MobPush快速集成推送服務(wù),應(yīng)對(duì)多樣的推送場(chǎng)景;
BBSSDK是Discuz論壇的動(dòng)員解決方案,同步Discuz論壇的數(shù)據(jù),實(shí)現(xiàn)論壇動(dòng)員。
ShareREC手機(jī)游戲視頻分享是ShareSDK圖形分享的延伸,可以實(shí)現(xiàn)手機(jī)游戲的播放和錄制功能,從而增強(qiáng)玩家粘性,有效促進(jìn)推廣;
MobAPI為開發(fā)人員提供了各種所需的原始數(shù)據(jù)和穩(wěn)定的API SERVICE,也消除了自己收集數(shù)據(jù)的繁瑣步驟;
MobPay的各種主流支付渠道,一鍵即可接入,滿足企業(yè)多元化需求;
ShopSDK小時(shí)快速搭建你的商城系統(tǒng),商品管理-訂單交易-售后退款-完整解決方案,豐富你app的APPlication場(chǎng)景;
MobIM為開發(fā)者提供即時(shí)通訊消息渠道服務(wù),重點(diǎn)保證通訊的安全性、穩(wěn)定性和可靠性,支持開發(fā)者使用App自帶的用戶系統(tǒng)或第三方用戶系統(tǒng);
App Factory新的App生產(chǎn)解決方案,可以結(jié)合數(shù)十種不同類型的App,滿足電子商務(wù)、生活服務(wù)、教育、信息、社交等行業(yè)的需求;
截至2017年12月,Mob開發(fā)者服務(wù)平臺(tái)覆蓋全球超過76億臺(tái)設(shè)備,SDK下載量超過318萬次,移動(dòng)應(yīng)用超過36萬次。
1.《反爬蟲 五分鐘了解爬蟲 爬蟲與反爬蟲的博弈》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《反爬蟲 五分鐘了解爬蟲 爬蟲與反爬蟲的博弈》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/caijing/618821.html