我被卡住了..这么多时间..在这里查找了数百个问题和答案..
我想从银行产品网站 grep 数据,例如“德尔塔”来自:
https://wertpapiere.ing.de/Investieren/Derivat/DE000HS2JL06
(
链接将于 2024 年 9 月 17 日失效,因为产品将于那时结束)
delta.text 应该是 -0,0193
第一次尝试:
delta = driver.find_element(By.XPATH, '//*[text()=\'Delta\']/following-sibling::td')
w
有时可以工作..大多数情况下不可以..出于什么原因?可能是这样的情况,因为“Delta”在网站上出现了 10 次,但是:
delta = driver.find_element(By.XPATH, '//*[text()=\'Delta\']/[5]following-sibling::td')
s
应该可以解决问题,但没有。
再次尝试:
delta = driver.find_element(By.XPATH, '//td[contains(text(), "Delta")]/following-sibling::td')
应该有效,但也无效。
尝试使用完整补丁应该可以解决问题:
delta = driver.find_element(By.XPATH, '/html/body/main/div[2]/div/div[2]/div[1]/sh-derivative-greeks/div/div[1]/div/table/tbody/tr[2]/td[2]')
但是找不到该元素;我认为是因为网站正在生成动态 ID。
有人有决定性的秘诀吗?
非常感谢! 克里斯
该页面中的信息通过 XHR 调用提供给各种 API 端点。您可以在浏览器的开发工具 -> 网络选项卡中检查这些端点。 以下是获得特定
delta
值的方法:
import requests
import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.max_colwidth', None)
headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.79 Safari/537.36'
}
df = pd.json_normalize(requests.get('https://component-api.wertpapiere.ing.de/api/v1/derivative/greeks/DE000HS2JL06', headers=headers).json())
print(df[[x for x in df.columns if x not in ['description.value']]])
终端结果:
isin isEmpty isVisible description.label delta.value delta.formatString delta.formatType delta.label gamma.value gamma.formatString gamma.formatType gamma.label theta.value theta.formatString theta.formatType theta.label vega.value vega.formatString vega.formatType vega.label rho.value rho.formatString rho.formatType rho.label omega.value omega.formatString omega.formatType omega.label labels.title labels.noInformationAvailable
0 DE000HS2JL06 False True Erklärung der Griechen -0.0193 0,0.00[00] Number Delta 0.0003 0,0.00[00] Number Gamma -0.003 0,0.00[00] Number Theta 0.0139 0,0.00[00] Number Vega -0.0382 0,0.00[00] Number Rho -8.8416 0,0.00 Number Omega (Hebel) Griechen Keine Informationen vorhanden
可以在此处找到请求文档。