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