?
這一小節(jié)重點(diǎn)介紹兩個(gè)利器phantomjs和selenium.通過(guò)利用這些工具可以破解本地JS環(huán)境的反爬措施.
本地JS環(huán)境是個(gè)殺器,可以通殺沒(méi)有本地環(huán)境的任意爬蟲.其原理是因?yàn)闉g覽器自帶有引擎,引擎中包含有js運(yùn)行環(huán)境.所有js腳本都可以在瀏覽器上直接運(yùn)行,這一切都是發(fā)生在本地瀏覽器環(huán)境內(nèi)的,沒(méi)有上述的與后臺(tái)交互的行為,所有我們不能通過(guò)分析抓包得到的報(bào)文來(lái)繞過(guò)這類反爬措施。
所以,這時(shí)候我們就得用模擬瀏覽器內(nèi)核來(lái)繞過(guò)這個(gè)限制.現(xiàn)在業(yè)內(nèi)一般有兩種方式.無(wú)圖形化的phantomjs和有圖形化的selenium.分別屬于無(wú)頭瀏覽器與webdriver兩個(gè)陣營(yíng).下面我們就分為介紹一下:
- 無(wú)頭瀏覽器,具體來(lái)說(shuō)是一個(gè)除了圖形化界面外其余都與普通瀏覽器毫無(wú)區(qū)別的工具。運(yùn)用無(wú)頭瀏覽器,我們可以實(shí)現(xiàn)在爬蟲運(yùn)行過(guò)程中讓js腳本運(yùn)行在headlessa瀏覽器中,從而模擬出與一般瀏覽器一樣的頁(yè)面。然后我們就能如同一般情況下對(duì)該網(wǎng)頁(yè)進(jìn)行解析來(lái)提取數(shù)據(jù).我們用目前比較熱門的phantomjs瀏覽器來(lái)舉例,phantomjs是一個(gè)采用的是Webkit內(nèi)核與目前的Safari,Chrome等瀏覽器兼容性十分好的無(wú)頭瀏覽器。可以用來(lái)模擬所有瀏覽器操作,被廣泛運(yùn)用于自動(dòng)化測(cè)試和web爬蟲中.
- webdriver,此類一般用作自動(dòng)化測(cè)試較多,用于爬蟲的一般多用作測(cè)試環(huán)境.因?yàn)闊o(wú)頭瀏覽器沒(méi)有GUI圖形界面,爬取數(shù)據(jù)還好說(shuō),看有無(wú)數(shù)據(jù)返回亦或者數(shù)據(jù)返回的對(duì)錯(cuò),但如果是要通過(guò)點(diǎn)擊或者其他行為才能獲取到數(shù)據(jù)的頁(yè)面,那么沒(méi)有GUI界面的就無(wú)法即使的直到運(yùn)行的對(duì)錯(cuò),這時(shí)候就需要在類似selenium這種webdriver上進(jìn)行自動(dòng)化操作,來(lái)模擬無(wú)頭瀏覽器上的操作。在爬蟲這方面,selenium等于一個(gè)有界面的無(wú)頭瀏覽器.
不過(guò)如果使用了這種方式來(lái)繞過(guò)的話,運(yùn)行性能上會(huì)受到嚴(yán)重影響.
因?yàn)槭紫饶M瀏覽器就很費(fèi)性能,然后還有本地運(yùn)算JS更是消耗資源的大戶.所以比起其他方法來(lái)說(shuō)的話,這方面毫無(wú)疑問(wèn)的會(huì)慢很多.如果存在其他方法的話,請(qǐng)盡量不要用此方法.