首页 > 解决方案 > XPath 总是返回空列表

问题描述

我试图从这个网站中提取时间价值。

下面是我正在使用的代码

import requests
from lxml import html

page = requests.get('https://beta.nseindia.com/get-quotes/derivatives?symbol=NIFTY&identifier=OPTIDXNIFTY26-12-2019CE12300.00')
tree = html.fromstring(page.content)
test1 = tree.xpath('//*[@id="equity-derivative-op-timeStamp"]/text()')

print(test1)

结果:

[]

如何在上述页面的“选项链”选项卡和该特定 xpath 中获取时间戳值?

标签: pythonpython-3.xxpathpython-requestslxml

解决方案


正如拉斯克斯在他的回答中所说

该数据在页面加载后通过 Javascript 填充。

但是数据是作为 XHR 加载的。在 Firefox 中右键单击页面,选择 Inspect Element 选择 Network,选择 XHR,刷新页面右键单击感兴趣的请求并在新选项卡中打开它。

这样做我已经确定页面https://beta.nseindia.com/api/option-chain-indices?symbol=NIFTY可能对您感兴趣。它是一个 JSON 文件。您可以像使用任何 JSON 对象一样使用它:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0'
}

params = (
    ('symbol', 'NIFTY'),
)

response = requests.get('https://beta.nseindia.com/api/option-chain-indices', headers=headers, params=params)
j = response.json()
print(j['records']['timestamp'])

输出:

23-Dec-2019 15:30:00

如上所述,您需要为此特定请求提供标头。要确定 Firefox 中特定网页需要哪些标题,请右键单击页面,选择检查元素选择网络刷新页面右键单击要选择的请求,Copy然后Copy as cURL将复制的内容粘贴到https://curl.trillworks。 com然后使用生成的代码,如果它有效,则一次删除一个标题,直到您获得一个有效的最小集合。在 Chrome 中,这是一个类似的过程。


推荐阅读