天天看點

關于爬蟲的一些記錄

普通的文本型爬蟲就不說了,這裡主要說一下在爬取有JS腳本和驗證碼的一些内容時,遇到的坑。

作業系統的選擇:

由于爬蟲、資訊分析AI、Web接口都部屬在CentOS上,且系統部署的最優選擇還是centos。

爬蟲方面,文本型爬蟲是基礎,模拟浏覽器也是必須的。目前模拟浏覽器就三樣,Firefox、Chrome、PhantomJS,使用模拟浏覽器的好處是可以輕易應付web頁面内的JS腳本,并且用Firefox下面的selenium插件,還可以輕松定位頁面元素,比Chrome開發者模式和Fiddler更友善。

Centos下使用Selenium調用Chromedriver會報錯

unknown error: DevToolsActivePort file doesn't exist

網上解決方案:

        # options = Options()

        # options.add_argument('--no-sandbox')

        # options.add_argument('--disable-dev-shm-usage')

        # options.add_argument('--disable-gpu')  # 谷歌文檔提到需要加上這個屬性來規避bug

        # options.add_argument('--headless')  # 浏覽器不提供可視化頁面. linux下如果系統不支援可視化不加

        browser = webdriver.PhantomJS()  # 無界PhantomJS浏覽器

        # browser = webdriver.Chrome(chrome_options=options)  # 無界谷歌浏覽器

嘗試過用option仍無法解決,如果一定要在CentOS下面跑的話,我選擇放棄使用Chrome,然後把selenium降級到3.8.0版本。如果可以在Windows下面跑的話,就随意了。

Centos下使用Selenium調用PhantomJS可以實作爬取,新版本的Selenium會報一個警告出來,不影響使用(但windows下無法使用新版本Selenium支援PhantomJS),降級到3.8.0版本最好。

驗證碼的問題:

比較普通的數字、英文或漢字驗證碼,用打碼平台解決就好了。自己去做圖像識别的話,成本效益太低,當然如果有興趣并且時間充裕的,自己搗鼓一下驗證碼識别也無傷大雅。火狐和谷歌的無頭版浏覽器以及PhantomJS無界浏覽器,剛好有截圖函數,配合元素定位和PIL的圖檔切割,可以準确截取驗證碼圖檔,調用打碼平台的api識别即可,還可以充當需要輸入驗證碼的模拟輸入界面,識别好驗證碼後,用這幾個浏覽器的click和send_keys方法即可越過驗證碼。(複雜的、需要互動的驗證碼就直接放棄了)

包、庫和插件的安裝:

PhantomJS:http://phantomjs.org/download.html(windows和linux)

Chromedriver:http://chromedriver.storage.googleapis.com/index.html(驅動下載下傳)

                       https://blog.csdn.net/cz9025/article/details/70160273(驅動和浏覽器版本對照)

Firefox建議隻裝浏覽器和selenium插件,用來做元素定位和腳本錄制。火狐無頭浏覽器的速度,比谷歌和PhantomJS要慢許多,而且還容易崩潰。在windows環境下開發的時候,可以先用谷歌浏覽器做,做完後換PhantomJS穩定運作。

另:如果需要輸入驗證碼,PhantomJS似乎定位不到頁面的輸入框,在無頭chrome浏覽器中測試沒有問題,需要在無桌面版本的Centos伺服器上安裝Xvfb。

關于爬蟲的一些記錄

是以,坑還是很多的。