【问题标题】:Web scraping using python, how to deal with ngif?使用python进行网页抓取,如何处理ngif?
【发布时间】:2019-12-08 08:37:24
【问题描述】:

我正在尝试读取无法通过 API 获得的基金价格。基金在此列出https://bors.e24.no/#!/instrument/KL-AFMI2.OSE

起初我认为这将是一个简单的任务,所以我查看了 beautifulsoup,但意识到我想要的没有返回。据我所知,由于:

 <-- ngIf: $root.allowStreamingToggle --> 

我是一个初学者,所以希望有人可以帮助我用一种简单的方法来获得这个价值。

【问题讨论】:

  • 我在 HTML 中看不到 ngif。有ng-if="$root.allowStreamingToggle" 表示一些向页面添加数据的 JavaScript 框架。您必须使用Selenium 来获取数据。或者您可以尝试查找 JavaScript 用来获取数据的 url,然后使用 requests 获取它。
  • 预期结果是 c.1 961,74 吗?
  • 是的,结果就是这样。

标签: python selenium web-scraping beautifulsoup scrapy


【解决方案1】:

我看到 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]

【讨论】:

  • 知道 URL 中的日期 (stop=2019-07-30) 的用途吗?我尝试及时更改它并没有更改响应,但是更改为将来的日期会出错。
  • 我认为是结束日期
【解决方案2】:

标签“ngIf”几乎可以肯定意味着您尝试抓取的网站是一个 AngularJS 应用程序......在这种情况下,数据几乎肯定不在您正在提取并尝试使用 BeautifulSoup 解析的 HTML 页面中。

相反,页面可能稍后会提取数据(例如,通过 AJAX)并通过 Angular 的客户端代码将其呈现到页面。

如果一切都是正确的......那么 BeautifulSoup 不是正确的工具。

如果您可以识别页面正在调用的 AJAX 调用,那么您可能会有一些希望,然后直接调用 THAT。检查它以查看数据结构;如果幸运的话,它可能是 JSON,然后非常容易解析。如果这看起来很有希望,那么您可以简单地使用 requests 库,并跳过 BeautifulSoup。但是你必须做逆向工程来弄清楚你应该调用什么。

在这里,试试这个:我用浏览器控制台做了一点窥探。这是您要查找的数据吗? get info for KL-AFMI2.OSE

如果是这样.. 则直接在requests 中使用该 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2018-02-28
    • 2020-10-04
    • 2021-05-08
    • 2018-07-20
    相关资源
    最近更新 更多