我试图将Morningstar的桌子变成熊猫
网站链接 - http://financials.morningstar.com/cash-flow/cf.html?t=3IINFOTECH®ion=ind&culture=en-US
由于网站是Javascript,我首先使用selenium在本地浏览器中呈现网站,然后从浏览器中读取呈现的HTML文件并尝试阅读表格。
问题是表存储在div样式中如下所示:这意味着我无法使用pandas读取HTML或美丽的汤读取表函数来读取表。两者都给出错误no tables found
。有人可以通过简单的方法从div节点中提取数据,因为我不熟悉Python。下面是表
"" style="overflow:hidden;white-space: nowrap;">
25,875
</div>
<div class="pos column6Width109px" id="Y_2" rawvalue="16810200000" style="overflow:hidden;white-space: nowrap;">
16,810
</div>
<div class="pos column6Width109px" id="Y_3" rawvalue="13113600000" style="overflow:hidden;white-space: nowrap;">
13,114"
答案 0 :(得分:0)
您可以使用 requests 和 Beautifulsoup 获取数据,使用ajax调用检索html:
from bs4 import BeautifulSoup
from json import loads
import requests
from time import time
params = {'columnYear': '5', 'region': 'ind', 'rounding': '3', 'period': '12',
'curYearPart': '1st5year', 'culture': 'en-US', 'reportType': 'cf', 't': 'XNSE:3IINFOTECH',
'callback': 'jsonp{}'.format(str(int(time()))), 'order': 'asc', '_': str(int(time()))}
r = requests.get('http://financials.morningstar.com/ajax/ReportProcess4HtmlAjax.html', params=params)
cont = r.content
jsn = loads(cont[cont.find("{"):cont.rfind("}") + 1])
soup = BeautifulSoup(jsn["result"])
table = soup.select_one("div.r_xcmenu.rf_table")
headers = [d.text for d in table.select("div.rf_header [id^=Y_]")]
print headers
for row in table.find_all("div","rf_crow", style=False):
print([d.text for d in row.select("[id^=Y_]")])
这给了你:
[u'2011-03', u'2012-03', u'2013-03', u'2014-03', u'2015-03', u'TTM']
[u'3,511', u'(1,545)', u'495', u'498', u'(513)', u'(513)']
[u'975', u'1,092', u'2,308', u'2,564', u'2,291', u'2,291']
[u'\u2014', u'(80)', u'\u2014', u'\u2014', u'\u2014', u'\u2014']
[u'(10)', u'6', u'5', u'2', u'(1)', u'(1)']
[u'(1,277)', u'(3,556)', u'(401)', u'(409)', u'(2,080)', u'(2,080)']
[u'3,823', u'995', u'(1,417)', u'(1,661)', u'(724)', u'(724)']
[u'(1,168)', u'4,953', u'(398)', u'(190)', u'3,137', u'3,137']
[u'(4,713)', u'(617)', u'(426)', u'(229)', u'\u2014', u'\u2014']
[u'232', u'\u2014', u'\u2014', u'\u2014', u'89', u'89']
[u'\u2014', u'5,513', u'\u2014', u'\u2014', u'3,037', u'3,037']
[u'\u2014', u'\u2014', u'(1)', u'\u2014', u'\u2014', u'\u2014']
[u'3,251', u'\u2014', u'\u2014', u'0', u'\u2014', u'\u2014']
[u'63', u'57', u'29', u'39', u'12', u'12']
[u'(2,207)', u'(3,843)', u'(604)', u'(168)', u'(3,026)', u'(3,026)']
[u'(1,482)', u'\u2014', u'\u2014', u'\u2014', u'\u2014', u'\u2014']
[u'1,816', u'\u2014', u'\u2014', u'\u2014', u'\u2014', u'\u2014']
[u'(151)', u'\u2014', u'\u2014', u'\u2014', u'\u2014', u'\u2014']
[u'(410)', u'(341)', u'\u2014', u'\u2014', u'\u2014', u'\u2014']
[u'(1,980)', u'(3,502)', u'(604)', u'(168)', u'(3,026)', u'(3,026)']
[u'136', u'(435)', u'(506)', u'140', u'(403)', u'(403)']
[u'1,806', u'1,318', u'884', u'377', u'518', u'518']
[u'1,941', u'884', u'377', u'518', u'115', u'115']
[u'\xa0', u'\xa0', u'\xa0', u'\xa0', u'\xa0', u'\xa0']
[u'3,511', u'(1,545)', u'495', u'498', u'(513)', u'(513)']
[u'(4,713)', u'(617)', u'(426)', u'(229)', u'\u2014', u'\u2014']
[u'(1,203)', u'(2,162)', u'69', u'269', u'(513)', u'(513)']
u'\u2014'
是一个unicode _
,您会在页面上看到缺失值。