网页表格抓取()

优采云 发布时间: 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 中使用的形式。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线