Python中使用selenium抓取Javascript动态页面

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快速入门教程》吧,不复杂的。

Leave a Reply

Your email address will not be published. Required fields are marked *