每天早上的财务数据

2024-04-30 05:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从晨星网站搜集以下数据:

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?

在这篇文章中,他们解释说晨星的表是动态加载的,并使用了一些我不熟悉的json代码,并且不知何故生成了一个不同的weblink,该weblink成功地收集了数据,但我不明白它是从哪里来的?


Tags: 数据代码comhttphtmlibmregionen
3条回答

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

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

这并不像听起来那么难,但要想达到目的,你得绕一圈。

我发现JavaScript比Python+Selenium更容易删除动态站点。有一个很好的模块用于nodejs/phantomjsScraperJS。它非常容易使用:它将jQuery注入到已刮除的页面中,您可以使用jQuery选择器提取数据。

当网站提供一个API时,不管是官方支持的还是非官方的黑客攻击,Web抓取都可以大大简化。即使是黑客也比每天修改HTML要好。

因此,对morningstar api的搜索可能是富有成效的。而且,事实上,一些友好的注册者has already worked this out for you

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

相关问题 更多 >