XPath 总是 Returns 空列表
XPath Always Returns Empty List
我正在尝试从 this website 中提取时间值。
下面是我正在使用的代码
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)
结果:
[]
如何在上述页面的 "Option Chain" 选项卡和特定的 xpath 中获取时间戳值?
您返回的结果是空的,因为如果您检查正在获取的 URL 的页面源,equity-derivative-op-timeStamp
时间戳是空的:
<span id="equity-derivative-op-timeStamp" class="asondate"></span>
该数据在页面加载后通过 Javascript 填充。您将无法使用 requests
模块获取它;你需要使用像 selenium 这样的东西来驱动能够处理 javascript.
的真实浏览器
正如 larsks 在他的回答中所说
That data is populated via Javascript after the page loads.
但数据是作为 XHR 加载的。在 Firefox 中右键单击页面,select Inspect Element select Network,select XHR,刷新页面右键单击感兴趣的请求并在新选项卡中打开它。
我确定您可能对 https://beta.nseindia.com/api/option-chain-indices?symbol=NIFTY 页面感兴趣。这是一个 JSON 文件。你可以像任何 JSON object:
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
您需要为上述特定请求提供 header。要确定 Firefox 中特定 web-page 需要哪些 headers,请右键单击页面,select 检查元素 select 网络刷新页面,右键单击您想要的请求select Copy
然后 Copy as cURL
将您复制的内容粘贴到 https://curl.trillworks.com 然后使用生成的代码,如果有效,一次删除 headers 直到您得到一个有效的最小集合。在 Chrome 中也是类似的过程。
我正在尝试从 this website 中提取时间值。
下面是我正在使用的代码
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)
结果:
[]
如何在上述页面的 "Option Chain" 选项卡和特定的 xpath 中获取时间戳值?
您返回的结果是空的,因为如果您检查正在获取的 URL 的页面源,equity-derivative-op-timeStamp
时间戳是空的:
<span id="equity-derivative-op-timeStamp" class="asondate"></span>
该数据在页面加载后通过 Javascript 填充。您将无法使用 requests
模块获取它;你需要使用像 selenium 这样的东西来驱动能够处理 javascript.
正如 larsks 在他的回答中所说
That data is populated via Javascript after the page loads.
但数据是作为 XHR 加载的。在 Firefox 中右键单击页面,select Inspect Element select Network,select XHR,刷新页面右键单击感兴趣的请求并在新选项卡中打开它。
我确定您可能对 https://beta.nseindia.com/api/option-chain-indices?symbol=NIFTY 页面感兴趣。这是一个 JSON 文件。你可以像任何 JSON object:
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
您需要为上述特定请求提供 header。要确定 Firefox 中特定 web-page 需要哪些 headers,请右键单击页面,select 检查元素 select 网络刷新页面,右键单击您想要的请求select Copy
然后 Copy as cURL
将您复制的内容粘贴到 https://curl.trillworks.com 然后使用生成的代码,如果有效,一次删除 headers 直到您得到一个有效的最小集合。在 Chrome 中也是类似的过程。