python - 从 Morningstar 抓取财务数据

标签 python json beautifulsoup

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

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 中看到它们也是如此。

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

Python webscraping - NoneObeject Failure - broken HTML?

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

最佳答案

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

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

这并不像听起来那么难,但您需要花些时间才能到达那里。

关于python - 从 Morningstar 抓取财务数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668091/

相关文章:

python - 我如何/可以使用 python 和加密模块生成 PKCS#12 文件?

python - 使用 Webdriver 和 PhantomJS 记录 HTTP 流量

json - 在 Play for Scala 中将异构列表与 Json 相互转换

python 美丽汤爬行 json

python - 从特定 xml 节点提取值

Python 映射列表中的变量

java - Lombok @NonNull 空检查执行不适用于 Jackson 反序列化

javascript - 如何执行带有错误响应的 JSON api 调用?

python - bs4 丢弃特定标签之前的所有 HTML

python - 使用 python/numpy reshape 数组