首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Morningstar网站抓取财务数据

从Morningstar网站抓取财务数据
EN

Stack Overflow用户
提问于 2016-02-27 17:31:30
回答 3查看 16.8K关注 0票数 3

我正在尝试从下面的morningstar网站上获取数据:

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

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

代码语言:javascript
运行
复制
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代码,并以某种方式生成了一个不同的网页链接,它设法抓取了数据,但我不知道它是从哪里来的?

EN

回答 3

Stack Overflow用户

发布于 2016-02-27 18:08:09

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

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

这并不像听起来那么困难,但它需要你稍微摇晃一下才能到达那里。

票数 3
EN

Stack Overflow用户

发布于 2016-02-27 18:21:40

当网站提供API时,Web抓取可以大大简化,无论是官方支持还是非官方的黑客攻击。即使是黑客也比试图摆弄每天都会改变的HTML要好得多。

因此,搜索morningstar api可能是卓有成效的。实际上,还有一些友好的has already worked this out for you修女。

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

票数 1
EN

Stack Overflow用户

发布于 2016-02-27 18:35:03

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35668091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档