看起来你试图提取的数据在数据模型中,这意味着它是JSON格式的。如果你使用以下方法进行简单的解析:
import json
import re
data_string = soup.findAll('script')[11].string.encode('utf8')
data_string = data_string.split("DataModel.parse(")[1]
data_string = data_string.split(");")[0]
// parse out erroneous html
while re.search('\<[^\>]*\>', datastring):
data_string = ''.join(datastring.split(re.search('\<[^\>]*\>', datastring).group(0)))
// parse out other function parameters, leaving you with the json
data_you_want = json.loads(data_string.split(re.search('\}[^",\}\]]+,', data_string).group(0))[0]+'}')
print(data_you_want["estimate"])
>>> {'shares': {'shares_hash': {'twitter': None, 'stocktwits': None, 'linkedin': None}}, 'lastRevised': None, 'id': None, 'revenue_points': None, 'sector': 'financials', 'persisted': False, 'points': None, 'instrumentSlug': 'jpm', 'wallstreetRevenue': 23972, 'revenue': 23972, 'createdAt': None, 'username': None, 'isBlind': False, 'releaseSlug': 'fq3-2016', 'statement': '', 'errorRanges': {'revenue': {'low': 21247.3532016398, 'high': 26820.423240734}, 'eps': {'low': 1.02460526459765, 'high': 1.81359679579922}}, 'eps_points': None, 'rank': None, 'instrumentId': 981, 'eps': 1.4, 'season': '2016-fall', 'releaseId': 52773}
DataModel.parse是一个JavaScript方法,以括号和冒号结尾。该函数的参数是您想要的JSON对象。通过将其加载到
json.loads中,您可以像访问字典一样访问它。
然后,您可以将数据重新映射为CSV所需的格式。