从晨星网络抓取财务数据
Posted
技术标签:
【中文标题】从晨星网络抓取财务数据【英文标题】:Webscraping Financial Data from Morningstar 【发布时间】:2016-06-10 15:14:32 【问题描述】:我正在尝试从下面的晨星网站上抓取数据:
http://financials.morningstar.com/ratios/r.html?t=IBM®ion=USA&culture=en_US
我目前正在尝试只做 IBM,但希望最终能够输入另一家公司的代码并用那家公司做同样的事情。到目前为止,我的代码如下:
import requests, os, bs4, string
url = 'http://financials.morningstar.com/ratios/r.html?t=IBM®ion=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 的不断变化,可能值得一看。谢谢!以上是关于从晨星网络抓取财务数据的主要内容,如果未能解决你的问题,请参考以下文章
金蝶财务软件引入会计科目-从模块中引入科目后如何撤销,恢复原来的数据?