网页表格抓取()
优采云 发布时间: 2022-01-03 19:12网页表格抓取()
问题描述
伙计们!我又向你申请了。我可以使用标记来抓取简单的 网站,但我最近遇到了一个非常复杂的 网站 收录 JavaScript。因此,我想使用表格(csv)的格式获取页面底部的所有估计值。类似于用户“,收入估算”,“EPS估算”。
伙计们!我再次向你申请。我可以用标签抓取简单的网站,但最近我遇到了一个相当复杂的网站,它有 JavaScript。因此,我想以表格 (csv) 的格式获取页面底部的所有估计值。像“用户”、“收入估算”、“每股收益估算”。
我希望自己解决这个问题,但我还是失败了。
我希望自己解决,但有点失败。
这是我的代码:
from urllib import urlopen
from bs4 import BeautifulSoup
html = urlopen("https://www.estimize.com/jpm/fq3-2016?sort=rank&direction=asc&estimates_per_page=142&show_confirm=false")
soup = BeautifulSoup(html.read(), "html.parser")
print(soup.findAll('script')[11].string.encode('utf8'))
输出格式很奇怪,我不知道如何以正确的格式提取数据。我将不胜感激!
输出格式奇怪,我不知道如何以适当的形式提取数据。我将不胜感激!
推荐答案
您要提取的数据看起来像是在数据模型中,这意味着它是 JSON。如果您使用以下进行少量分析:
看起来您尝试提取的数据位于数据模型中,这意味着它是 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 中,您可以将其作为字典访问。
DataModel.parse 是一个 javascript 方法,这意味着它以括号和冒号结尾。该函数的参数是您想要的 JSON 对象。通过将其加载到 json.loads 中,您可以像访问字典一样访问它。
从那里,您可以将数据重新映射为您想要的 CSV 格式。
从那里您将数据重新映射到您希望它在 csv 中使用的形式。