使用Chrome快速实现数据的抓取(四)——优点
些一個抓取WEB頁面的數(shù)據(jù)程序比較簡單,大多數(shù)語言都有相應的HTTP庫,一個簡單的請求響應即可,程序發(fā)送Http請求給Web服務器,服務器返回HTML文件。交互方式如下:?
在使用DevProtocol驅動Chrome抓取數(shù)據(jù)時,交互過程則如下圖所示:
此時Chrome在中間充當了一個代理的角色,看上去變得更加復雜了,實際上卻對于我們的蜘蛛程序大有幫助。本文就簡單的總結下這種方式存在如下優(yōu)點。
獲取動態(tài)生成的網(wǎng)頁內容
現(xiàn)在很多的網(wǎng)頁內容的內容并不是一開是就能直接通過最初的Http請求直接獲取到的,而是在返回的html頁面中通過JS加載資源及計算動態(tài)生成的頁面。采用這種方式的原因有很多,有的是為了更好的用戶體驗,有的是因為開發(fā)框架,有的是為了節(jié)省帶寬,也有的則單純是為了加密頁面內容,從而實現(xiàn)反爬蟲的功能。
不管是因為什么原因,它使得本來很簡單的單一"請求-響應"式的交互過程變得復雜起來,傳統(tǒng)的一次交互即可完成所有的請求變成了如下形式:
動態(tài)加載給傳統(tǒng)的數(shù)據(jù)采集造成了不小的障礙,但往往需要分析頁面加載過程,分析JS,并在程序中嵌入js引擎,模擬瀏覽器執(zhí)行相應的腳本,獲取最終的數(shù)據(jù)。這是一個非常費時費力的過程,并且不容易分析全。
為了更方便解析這種動態(tài)網(wǎng)頁,一些爬蟲引擎開始引入了Dom解析和JS執(zhí)行能力,模擬瀏覽器來解析并獲取相關資源。但由于這一過程非常復雜,往往這些功能并不是非常完善,有不少的坑。
現(xiàn)在,通過Chrome的方式就是這種解析頁面的方式的集大成版本了,由于Chrome本身就是瀏覽器,具有完善的頁面解析能力,處理起來如魚得水。解析過程由chrome代理完成,我們只需要從chrome里獲取最后解析完成的結果即可。
有效的應對反爬蟲策略
最簡單的反爬機制,就是檢查HTTP請求的Headers信息,包括User-Agent, Referer、Cookies等,根據(jù)手寫的Http請求報文頭和常用的瀏覽器報文頭的差異來反爬蟲。這些防止初級爬蟲非常有效,但Chrome本身就是一個標準瀏覽器,對于這類反爬機制天生免疫。
另外一種反爬機制是上文所說的動態(tài)加載,基于上面的解釋,這個對Chrome來說也是天生免疫的。
當然,反爬策略還有很多,如限制IP訪問次數(shù),限制訪問頻率,驗證碼、等方式來反爬。這些雖然Chrome不直接支持,但應對起來也比傳統(tǒng)的Http請求方便得多的。后面文章中會陸續(xù)介紹,這里就不一一展開了。
DOM操作能力
Chrome有完善的Dom操作能力,在Chrome DevTools控制臺中能執(zhí)行的操作基本都可以在程序中通過DevProtocol完成,為我們的APP添加了完美的DOM操作能力, 很多以前需要分析HTML才能獲取的數(shù)據(jù)現(xiàn)在可以直接通過Jquery之類的js函數(shù)完成。并且可以直接格式化為JSON輸出,方便了不止一點半點。
和服務器交互更容易
很多時候,有的頁面是需要一些交互才能獲取到的,如登陸。
由于Chrome具有JS執(zhí)行能力,我們可以通過一些簡單的JS腳本非常容易的執(zhí)行。例如,園子的登陸就可以通過如下腳本實現(xiàn):
????$("#input1")[0].value = "userName";
????$("#input2")[0].value = "password";
????$("#signin")[0].click();
有的網(wǎng)站需要驗證碼來防止爬蟲程序,我們甚至可以通過在chrome中手動打碼的這種自動結合手動的方式快速實現(xiàn)數(shù)據(jù)抓取。如果要開發(fā)出支持接入打碼平臺或智能識別平臺的接口,也遠比傳統(tǒng)的蜘蛛程序容易的多。
另外,Chrome也提供了非常豐富的API模擬鍵盤和鼠標的輸入的接口,用起來非常方便。????
開發(fā)調試方便
開發(fā)爬蟲程序往往是一個反復調試的過程,由于我們是直接解析Chrome獲取的數(shù)據(jù),由于Chrome DevTool本身就是一個強大的調試工具。這樣大大加速了我們的開發(fā)過程。
我們可以通過首先在Chrome中通過DevTools查看解析我們的頁面,通過控制臺程序驗證編寫的腳本。用Chrome就可以完成大部分腳本的開發(fā),而這一部分往往是不能復用,并且非常花時間的。這相當于我們獲取了一個強大的調試工具,可以節(jié)省不少時間。
另外,Chrome也是前端人員非常熟悉的工具,我們也可以把腳本開發(fā)的工作交給前端人員,他們可以更高效的開發(fā)腳本,大幅提高開發(fā)效率。
缺點
說了這么多的優(yōu)點,最后我們來說一說它的缺點,這種方式主要的缺點還是性能。
傳統(tǒng)的爬蟲是非常輕量級的,就是一個傳統(tǒng)的tcp的socket程序,通過異步socket的方式可以非常容易的實現(xiàn)成千上萬的并發(fā)數(shù)的,并且只加載了需要的信息,性能非常高。
而通過驅動chrome的方式是通過chrome獲取服務器端的數(shù)據(jù)的,一來加載了不必要的圖片,樣式,廣告等文件造成了帶寬的浪費,另外也對網(wǎng)頁進行了渲染造成了CPU的開銷,雖然可以通過插件減少不必要的文件加載和headless的方式減少開銷,但相對傳統(tǒng)的請求應答方式來說仍然是一個重量級的獲取方式。對于小規(guī)模的采集可能還問題不大,但如果要進行類似搜索引擎的方式的海量數(shù)據(jù)采集可能就有點吃不消了。
參考文章:
- 普通反爬蟲機制的應對策略
- 常見的反爬蟲和應對方法
- Google 爬蟲如何抓取 JavaScript 的?
轉載于:https://www.cnblogs.com/TianFang/p/7148043.html
總結
以上是生活随笔為你收集整理的使用Chrome快速实现数据的抓取(四)——优点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Arduino学习笔记07
- 下一篇: 针对双系统ubuntu16.04卡死及系