普通的文字型爬蟲就不說了,這裡主要說一下在爬取有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:和linux)
驅動和瀏覽器版本對照)
firefox建議只裝瀏覽器和selenium外掛程式,用來做元素定位和指令碼錄製。火狐無頭瀏覽器的速度,比谷歌和phantomjs要慢許多,而且還容易崩潰。在windows環境下開發的時候,可以先用谷歌瀏覽器做,做完後換phantomjs穩定執行。
另:如果需要輸入驗證碼,phantomjs似乎定位不到頁面的輸入框,在無頭chrome瀏覽器中測試沒有問題,需要在無桌面版本的centos伺服器上安裝xvfb。
因此,坑還是很多的。
關於爬蟲的一些東西
這幾天在寫乙個爬蟲,實際上整個過程和思路很簡單,難點在於繁雜的格式處理和一些未知的小問題,還有對python不太熟悉.基本上是邊學邊寫.記錄一些過程中值得記住的東西.關於python的 1.檔案的開頭要用 coding utf 8 2.建立資料夾可以要import os os.mkdir r new...
記錄一些爬蟲的小細節
1.使用beautifulsoup初始化用requests獲取到的html文字時,有時候會出現亂碼現象,只需要指定response.encoding utf 8 即可 2.有時候使用selenium定位元素時,定位 沒有問題,但是提示定位不到,這是因為頁面中存在多個iframe標籤,相當於多個子頁面...
關於torch的一些記錄
int型tensor from torch.autograd import variable from torch import inttensor var variable inttensor 1,0 0,1 檢視size var.size torch.size 2,2 將var.size 轉換為...