selenium是一套用于测试WebUI的自动化测试框架,它通过调用Chrome、Firefox来完成动态页面(含Javascript)的加载,因此也可以用来完成动态网页抓取。
1、下载selenium
wget http://selenium-release.storage.googleapis.com/2.44/selenium-server-standalone-2.44.0.jar
2、启动selenium-standalone
java -jar ./selenium-server-standalone-2.44.0.jar -singleWindow
上面启动的这个,是一个网络服务器,它可以接受一个url串,然后在自己进程内启动浏览器,解析并与客户端交互,根据需要将解析结果返回给客户端。
3、安装selenium
sudo apt-get install python-selenium
这个包是一个selenium的client的python封装,当然也可以自己手动pypi或者pip安装。
文档可以见这里。
4、代码
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities # Init selenium replace the ip port with your own selenium-standalone driver = webdriver.Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=DesiredCapabilities.FIREFOX ) # Remote get dynamic page on selenium-standalone try: driver.set_page_load_timeout(5) driver.get(response.url) except: pass # Parse for tag in driver.find_elements_by_xpath(xpath): # ...process pass # Cleanup selenium driver.close()
5、在非X11环境下使用
可以通过xvfb来完成,这是一个模拟xserver的程序,可以在没有xserver的机器上运行以来于xserver服务的程序。
sudo apt-get install xvfb
运行
xvfb-run java -jar ./selenium-server-standalone-2.44.0.jar -singleWindow
6、关于和Scrapy结合
大家自行参考我之前写的文章《Python抓取框架Scrapy快速入门教程》吧,不复杂的。