使用lxml刮取动态html字段

我一直在尝试使用lxml抓取HTML页面的动态字段
代码非常简单,如下所示:

from lxml import html
import requests
page = requests.get('http://www.airmilescalculator.com/distance/blr-to-cdg/')
tree = html.fromstring(page.content)
miles = tree.xpath('//input[@class="distanceinput2"]/text()')
print miles

我得到的结果只是一个空列表[]
预计结果将是列表中的数字.
但是我能够刮掉同一页面的静态字段.

在此先感谢您的帮助.

解决方法:

正如您已经想到的那样,距离是根据对Google Maps API的XHR调用结果动态计算出来的.这对于仅使用请求进行模拟/重复并不容易,因为您至少需要一个真正的浏览器具有的Javascript引擎.

以下是通过selenium和无头PhantomJS browser解决问题的方法:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get("http://www.airmilescalculator.com/distance/blr-to-cdg/")

distance = driver.find_element_by_id("totaldistancemilestext").text
print(distance)

打印4868.

上一篇:Python:将HTML片段分隔为段落


下一篇:python – 在不使用DOM方法的情况下迭代解析大型XML文件