从晨星网络抓取财务数据

Posted

技术标签:

【中文标题】从晨星网络抓取财务数据【英文标题】:Webscraping Financial Data from Morningstar 【发布时间】:2016-06-10 15:14:32 【问题描述】:

我正在尝试从下面的晨星网站上抓取数据:

http://financials.morningstar.com/ratios/r.html?t=IBM&region=USA&culture=en_US

我目前正在尝试只做 IBM,但希望最终能够输入另一家公司的代码并用那家公司做同样的事情。到目前为止,我的代码如下:

import requests, os, bs4, string



url = 'http://financials.morningstar.com/ratios/r.html?t=IBM&region=USA&culture=en_US';
fin_tbl = ()


page = requests.get(url)

c = page.content

soup = bs4.BeautifulSoup(c, "html.parser")


summary = soup.find("div", "class":"r_bodywrap")

tables = summary.find_all('table')

print(tables[0])

我目前遇到的问题与我抓取的更简单的网页不同,即使我可以在页面的 HTML 中看到它们,程序似乎也无法找到任何表格。

在研究这个问题时,最接近的***问题如下:

Python webscraping - NoneObeject Failure - broken HTML?

在那篇文章中,他们解释说 Morningstar 的表格是动态加载的,并使用了一些我不熟悉的 json 代码,并以某种方式生成了一个不同的网络链接,该链接设法抓取了数据,但我不明白它来自哪里?

【问题讨论】:

我已经构建了一个 api 来获取晨星溢价数据morningstar-api.herokuapp.com/analysisData?ticker=AAPL 【参考方案1】:

我发现使用 javascript 比使用 Python + Selenium 更容易抓取动态网站。 nodejs/phantomjs 有一个很棒的模块:ScraperJS。它非常易于使用:它将 jQuery 注入到抓取的页面中,您可以使用 jQuery 选择器提取数据。

【讨论】:

谢谢 Alexander 我从未使用过 java,但必须检查一下它的优点是否值得学习【参考方案2】:

当网站提供 API 时,可以大大简化网页抓取,无论是官方支持的还是非官方的 hack。即使是 hack 也比尝试摆弄每天都在变化的 HTML 要好。

所以搜索morningstar api 可能会很有成效。而且,事实上,一些友好的 Gister has already worked this out for you。

如果搜索没有结果,通常富有成效的方法是调查 ajax 调用页面正在做什么来检索数据,然后直接发出它们。这可以通过浏览器调试器、“网络”选项卡等来实现,其中每个请求都可以在非常友好的 UI 中进行详细调查。

【讨论】:

嘿 flaschbier,感谢您找到该 API,我将不得不仔细研究它们。这将解决我眼前的问题,但我也希望以此为契机,通过将其用作项目来了解有关网络抓取的更多信息。我查看了您建议的 API,但找不到任何东西来解释后台发生的事情。 鉴于您的最后一段,我从未看过页面如何检索数据,也不知道从哪里开始。我使用 Chrome 是否有任何材料或教程可以推荐作为对此的介绍?谢谢 并非如此。有docs,但我没看过。也许我应该有,但只需按下F12,切换到network 选项卡,重新加载页面并查看已经发生的事情就可以了。 (单击您看到请求详细信息的 URL;)【参考方案3】:

抓取一些现代网页是一个真正的问题,特别是在由单页应用程序生成的页面上(其中内容由 AJAX 调用和 DOM 修改维护,而不是作为现成的 HTML 在单个服务器响应中交付) .

我发现访问此类内容的最佳方法是使用 Selenium Web 测试环境让浏览器在我的程序控制下加载页面,然后从 Selenium 中提取页面内容以进行抓取。还有其他环境会执行脚本并适当地修改 DOM,但我没有使用过任何一个。

这并不像听起来那么困难,但是要花点时间才能到达那里。

【讨论】:

嘿 Holdenweb,感谢我过去曾使用过 Selenium,可能会仔细看看。当我第一次开始研究这个问题时,我考虑过这个问题,但我的主要保留意见是,据我所知,Selenium 不能只在后台运行。但鉴于您和其他人所说的现代页面不是纯 HTML 以及该 HTML 的不断变化,可能值得一看。谢谢!

以上是关于从晨星网络抓取财务数据的主要内容,如果未能解决你的问题,请参考以下文章

年终感想——财务自由的程序员,你见过吗?

如何用爬虫抓取股市数据并生成分析报表

金碟k3财务软件的简介

金蝶财务软件引入会计科目-从模块中引入科目后如何撤销,恢复原来的数据?

如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?

从数据挖掘到数据中台:数据分析正在深刻影响财务管理