从HTML文档获取XPath

时间:2018-02-19 22:47:08

标签: python html xpath python-requests

https://next.newsimpact.com/NewsWidget/Live

我正在尝试编写一个python脚本,该脚本将从上面链接中的HTML表中获取值。上面的链接是我试图从中获取的网站,这是我编写的代码。我认为可能我的XPath不正确,因为它在其他元素上做得很好,但我正在使用的路径没有返回/打印任何东西。

from lxml import html
import requests
page = requests.get('https://next.newsimpact.com/NewsWidget/Live')
tree = html.fromstring(page.content)

#This will create a list of buyers:
value = tree.xpath('//*[@id="table9521"]/tr[1]/td[4]/text()')

print('Value: ', value)

奇怪的是,当我打开视图源代码页时,我无法找到我想要提取的表。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您的问题很简单,request根本不处理。这些值是JS生成的!

如果你真的需要运行这个,你需要使用一个能够理解JS的模块,比如

您可以首先使用或在浏览器中禁用JS来测试何时需要JS。在导航栏中使用firefox:about:config,然后搜索javascript.enabled,然后双击它以在true或false之间切换

中,打开chrome dev工具,可以选择某处。

检查https://github.com/makinacorpus/spynner

另一个(可能的)问题,请使用tree = html.fromstring(page.text)而不是tree = html.fromstring(page.content)

答案 1 :(得分:1)

初始页面源中缺少必需的数据 - 它来自XHR。你可以得到如下:

import requests

response = requests.get('https://next.newsimpact.com/NewsWidget/GetNextEvents?offset=-120').json()

first_previous = response['Items'][0]['Previous']  # Current output - "2.632"
second_previous = response['Items'][1]['Previous']  # Currently - "0.2"
first_forecast = response['Items'][0]['Forecast']  # ""
second_forecast = response['Items'][1]['Forecast']  # "0.3"

您可以将response解析为简单的Python dict并获取所有必需的数据