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