我一直在尝试使用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.