Ubuntu下的Selenium爬蟲的配置
在服務器Ubuntu系統上跑爬蟲,爬蟲是基於Selenium寫的,遇到好幾個問題,現在這裏記錄一下。
1. 安裝環境
阿裏雲,Ubuntu16.04,因為沒有界面,所以遠程命令行操作。爬蟲是基於Selenium寫的,需要安裝Chrome瀏覽器和Chromedriver。
1.1安裝Chrome和Chromedriver
Chrome直接去官網下載,安裝穩定版,https://www.ubuntuupdates.org/ppa/google_chrome?dist=stable,下載deb格式的安裝包,上傳到服務器,用命令行安裝:
1 sudo dpkg -i google-chrome*.deb2 sudo apt-get install -f
安裝完成使用命令查看Chrome的版本,若出現版本號說明安裝成功。
1 google-chrome --version
Chromedriver去淘寶鏡像下載,http://npm.taobao.org/mirrors/chromedriver/,下載時選擇與Chrome版本對應的Chromedriver,點開裏面的notes.txt可以看到對應關系。下載後上傳到服務器,或者 wget -N鏈接下載。下載後解壓,若沒有安裝解壓軟件,使用下面的命令安裝。
1 sudo apt-get install unzip
將解壓後的文件移動到/usr/bin/文件下,添加執行權限。
1 sudo mv chromedriver /usr/bin/ 2 sudo chmod +x /usr/bin/chromedriver
1.2 安裝Anaconda3
去清華源下載Anaconda3,https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/,下載後上傳到服務器,使用命令安裝,此處要註意把Anaconda安裝為Linux下多用戶共享的軟件,避免多個用戶重復安裝。
1 sudo bash Anaconda3-5.2.0-Linux-x86_64.sh
安裝時有一個步驟是要求你輸入安裝路徑,Linux下多用戶共享的軟件是在/usr/local目錄下,所以填寫這個目錄。安裝最後會提示問你要不要把Anaconda添加到系統路徑,選Yes,然後更新root用戶的設置(這樣做還會避免另一個大坑,下面會講到)。關閉窗口後生效。
1 sudo source ~/.bashrc
若已經為root用戶安裝了Anaconda,建議卸載後重新安裝。卸載方法是刪除原來的/usr/local/bin下Anaconda的安裝目錄,編輯root用戶的設置文件:
1 sudo vim ~/.bashrc
把裏面原來添加的Anaconda路徑設置刪除,然後更新一下設置。
1 sudo source ~/.bashrc
在命令行裏輸入python,出現的python版本是3.6而不是系統自帶的2.7或3.5,說明安裝成功。
1.3 安裝Selenium
在root用戶下安裝:
1 pip install selenium
打開python,輸入以下代碼,不報錯說明安裝成功。
1 from selenium import webdriver
安裝到這裏就能跑代碼了嘛?不,還不行,哈哈哈。
2. 修改配置來執行代碼
Selenium跑不起來,報錯。就不截圖了,只是說不能正常啟動。經過我的搜索,有兩個問題會導致這個錯誤:
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally (Driver info: chromedriver=........
1. 當前執行代碼的用戶是root用戶,而root用戶打開Chrome需要在沙盒裏運行,webdriver裏默認關閉了沙盒,所以報錯。兩種解決方法,為Ubuntu添加一個新用戶或者修改代碼裏的設置。我只實驗了第一種,添加了一個新用戶,第二種沒試。因為root用戶只用來管理,新用戶用來跑代碼,分開不容易出錯。
Ubuntu裏添加新用戶的方法是在root用戶下執行:
1 sudo adduser username
會讓你設置密碼。companyname,phone之類的直接enter跳過就行。
2. 沒有界面,所以裝一個虛擬界面才行。
在root用戶下安裝pyvirtualdisplay:
1 pip install pyvirtualdisplay
然後在代碼裏添加以下幾行,進行測試:
1 from selenium import webdriver 2 from pyvirtualdisplay import Display 3 4 if __name__ == ‘__main__‘: 5 display = Display(visible=0, size=(800, 800)) 6 display.start() 7 browser = webdriver.Chrome() 8 browser.get(‘http://www.baidu.com‘) 9 print (browser.title)
大功告成。第一篇博客,嘻嘻。 如果還有問題那就是第一步安裝的Chrome和Chromedriver版本不匹配導致的,仔細檢查一下。
Ubuntu下的Selenium爬蟲的配置