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
好了,现在有了Chrome了。
但是绝大多数Linux服务器没有图形化界面,所以你还需要模拟出一个展示 WebDriver 的地方。
这里使用 PyVirtualDisplay 。
在使用driver之前,先开启一个演示界面
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
你发现仍然报错,因为Chromedriver的很多版本(2.20,2.19,2.15都是不行的)和selenium是存在冲突的,所以你还需要找到一个specific版本,它是chromedriver for linux 64 2.10。
不要想着在64位的服务器下使用32位的东西了,它们只会增加出错误的几率。
到现在,这个爬虫才可以跑起来,但是效果不是很理想,可能是因为兼容性之类的问题,在服务器下表现远没有开发环境下顺畅,错误频出。
----------正文结束-----------
但是我们还是有办法的不是吗,比如写一个?炸天的守护进程,来保证即便出错了,我们的爬虫仍然可以坚挺的不断的爬:
# i am the best deamon
while true ; do
pkill chromedriver
python spider.py
done
好了,总结一下是如果你恰好遇到了需要爬的内容,那么模拟一些JS事件、发送请求是一个比较烦人的问题,但是相比需要在保证效率的前提下需要不断换代理来应对反爬虫策略之类的问题来说,还算是一个一劳永逸的事。