selenium提供了css選擇器和xpath甚至還有by tag_name、by attribute之類的方法,很方便,在此之前我的都是xpath,但是看到這些方法,我還是果斷放棄了xpath......
坑
等等,你以為這樣的代碼在osx下測試的好好的,放到Linux下能跑了?
拿Debian舉例:
sinux@Sinux-Universe:~$ cat /etc/issue
Debian GNU/Linux 8
l
首先你的服務器需要一個瀏覽器,下載一個Chromium吧:
sudo apt-get install chromium
好了,現(xiàn)在有了Chrome了。
但是絕大多數(shù)Linux服務器沒有圖形化界面,所以你還需要模擬出一個展示 WebDriver 的地方。
這里使用 PyVirtualDisplay 。
在使用driver之前,先開啟一個演示界面
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
你發(fā)現(xiàn)仍然報錯,因為Chromedriver的很多版本(2.20,2.19,2.15都是不行的)和selenium是存在沖突的,所以你還需要找到一個specific版本,它是chromedriver for linux 64 2.10。
不要想著在64位的服務器下使用32位的東西了,它們只會增加出錯誤的幾率。
到現(xiàn)在,這個爬蟲才可以跑起來,但是效果不是很理想,可能是因為兼容性之類的問題,在服務器下表現(xiàn)遠沒有開發(fā)環(huán)境下順暢,錯誤頻出。
----------正文結(jié)束-----------
但是我們還是有辦法的不是嗎,比如寫一個?炸天的守護進程,來保證即便出錯了,我們的爬蟲仍然可以堅挺的不斷的爬:
# i am the best deamon
while true ; do
pkill chromedriver
python spider.py
done
好了,總結(jié)一下是如果你恰好遇到了需要爬的內(nèi)容,那么模擬一些JS事件、發(fā)送請求是一個比較煩人的問題,但是相比需要在保證效率的前提下需要不斷換代理來應對反爬蟲策略之類的問題來說,還算是一個一勞永逸的事。