python - 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 中获取时间戳值?
解决方案
正如拉斯克斯在他的回答中所说
该数据在页面加载后通过 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 中,这是一个类似的过程。
推荐阅读
- android - 在我的 SQL 服务器上以纯文本形式存储 Firebase 客户端令牌是否安全?
- c# - 提高 WPF 应用程序性能的最佳方法
- redis - redis 在单个查询中获取多个键的值?
- iis - 重定向到 HTTPS,除了 localhost
- javascript - 动态生成的方法 VueJS
- python - 您如何检查文件是否已被修改,在一定的时间间隔?
- java - 迭代地图和列表的嵌套结构
- oauth-2.0 - 使用 oauth2 授权的 Spring 数据拒绝访问
- php - Laravel Eloquent GroupBy Name 创建 ID 数组
- c++ - 如何读取 .yml 文件的序列并将它们连接到单个 .yml 文件中