我正在尝试读取API无法提供的基金价格。该基金列在https://bors.e24.no/#!/instrument/KL-AFMI2.OSE
起初,我认为这将是一个简单的任务,所以我看了Beautifulsoup,但意识到我想要的东西没有退还。据我所知,由于以下原因:
<-- ngIf: $root.allowStreamingToggle -->
我是一个初学者,所以希望有人能以一种简单的方法帮助我获得此价值。
答案 0 :(得分:3)
我看到json是从“网络”标签中的以下端点返回的
import requests
headers = {'user-agent': 'Mozilla/5.0'}
r = requests.get('https://bors.e24.no/server/components/graphdata/(PRICE)/DAY/KL-AFMI2.OSE?points=500&stop=2019-07-30&period=1weeks', headers = headers).json()
当时的价格
r['rows'][0]['values']['series']['c1']['data'][3][1]
答案 1 :(得分:2)
标记“ ngIf”几乎可以肯定意味着您要抓取的网站是AngularJS应用...在这种情况下,几乎可以肯定的是,您要提取并尝试使用BeautifulSoup解析的HTML页面中的数据并不存在。
相反,页面可能稍后会提取数据(例如,通过AJAX),并通过Angular的客户端代码将其呈现到页面中。
如果一切正确,那么BeautifulSoup不是正确的工具。
如果您可以识别页面正在调用的AJAX调用,然后直接调用THAT,则可能会有一点希望。检查它以查看数据结构;如果幸运的话,也许是JSON,然后超级容易解析。如果这看起来很有希望,那么您可以简单地使用requests
库,并跳过BeautifulSoup。但是您必须进行逆向工程才能弄清楚您应该调用的内容。
在这里,尝试一下:我在浏览器控制台上做了一些窥探。这是您要查找的数据吗? get info for KL-AFMI2.OSE
如果是..,则直接在requests
中使用该URL。