普通的文本型爬蟲就不說了,這裡主要說一下在爬取有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。

是以,坑還是很多的。