在上一篇python使用xslt提取网页数据中,要提取的内容是直接从网页的source code里拿到的。但是对于一些Ajax或动态html, 很多时候要提取的内容是在source code找不到的,这种情况就要想办法把异步或动态加载的内容提取出来。python中可以使用selenium执行javascript,selenium可以让浏览器自动加载页面,获取需要的数据。selenium自己不带浏览器,可以使用第三方浏览器如Firefox, Chrome等,也可以使用headless浏览器如PhantomJS在后台执行。例如我们要抓取京东手机页面的手机名称和价格(价格在网页源码是找不到的)
第一步:在集搜客谋数台上,通过图形界面快速的生成xslt
第二步:执行如下代码(在windows10, python3.2下测试通过);#/usr/bin/python
from urllib import request
from lxml import etree
from selenium import webdriver
import time
# 京东手机商品页面
url="http://item.jd.com/1312640.html"
# 下面的xslt是通过集搜客的谋数台图形界面自动生成的
xslt_root = etree.XML("""
<商品>
商品>
<价格>
价格>
<名称>
名称>
""")
# 使用webdriver.PhantomJS
browser=webdriver.PhantomJS(executable_path=‘C:\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe‘)
browser.get(url)
time.sleep(3)
transform = etree.XSLT(xslt_root)
# 执行js得到整个dom
html = browser.execute_script("return document.documentElement.outerHTML")
doc = etree.HTML(html)
# 用xslt从dom中提取需要的字段
result_tree = transform(doc)
print(result_tree)
第三步:可以看到,网页中的手机名称和价格被正确抓取下来了。
本文出自 “fullerhua的博客” 博客,谢绝转载!