2016-02-27 47 views
1

我想从下面的晨星网站抽取数据:Webscraping财务数据来自晨星

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?

在一个他们解释说,晨星公司的表是动态加载和使用的一些JSON代码,我不熟悉,不知何故产生一个不同的网络链接哪些设法刮了数据,但我不明白它来自哪里?

感谢

回答

2

这是刮一些现代的网页,特别是对单页面应用程序(其中内容是由AJAX调用和DOM修改保持生成的页面,而不是交付的现成去HTML的一个现实问题在单个服务器响应中)。

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

它并不像听起来那么难,但它会带你一点点跳槽到达那里。

+0

嘿holdenweb,谢谢你们,我在过去曾经和Selenium一起玩过,并且可能会仔细研究一下。当我开始考虑这个问题时,我曾考虑过这个问题,但我的主要预测是,据我所知,Selenium不能在后台运行。但是根据你和其他人对现代网页所说的直接HTML和HTML的不断变化,可能值得看看它。谢谢! – user5841014

1

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

因此,寻找morningstar api可能是富有成效的。而且,事实上,一些友善的戈尔斯特has already worked this out for you

如果搜索没有结果,通常富有成效的方法是调查ajax调用页面正在执行的操作来检索数据,然后直接发布它们。这可以通过浏览器调试器,选项卡“网络”来实现,或者可以在非常友好的用户界面中详细调查每个请求。

+0

嘿flaschbier,感谢您发现API,我将不得不仔细看看它们。这将解决我眼前的问题,但我也希望将此作为一个机会,通过将其用作项目来了解更多关于网络浏览的信息。我查看了你所建议的API,但找不到任何解释背景中发生的事情。 – user5841014

+0

鉴于你的最后一段,我从来没有看过页面如何检索数据,也不知道从哪里开始。我使用Chrome有没有任何材料或教程可以推荐作为对此的介绍?谢谢 – user5841014

+0

不是。有[文档](https://developer.chrome.com/devtools),但我从来没有读过它。也许我应该有,但只要按下'F12',切换到'网络'选项卡,重新加载页面,看看已经发生了什么。 (点击您查看请求详细信息的网址;) – flaschbier

0

我发现通过JavaScript比使用Python + Selenium动态网站更容易。有一个伟大的模块nodejs/phantomjsScraperJS。它使用起来非常简单:它将jQuery注入到抓取的页面中,并且可以使用jQuery选择器提取数据。

+0

谢谢亚历山大我从来没有使用过java,但必须检查它是否值得您学习 – user5841014