【问题标题】:How do I extract a specific field from Yahoo Finance using Python/BeautifulSoup如何使用 Python/BeautifulSoup 从 Yahoo Finance 中提取特定字段
【发布时间】:2023-03-30 05:18:01
【问题描述】:

我想提取一家公司的流通股。请参阅此链接作为示例: 查看源代码:https://finance.yahoo.com/quote/GE/key-statistics

我可以看到 floatShares 中的原始数据是我想要得到的:

"floatShares":{"raw":8733446536,"fmt":"8.73B","longFmt":"8,733,446,536"}

但是,当我使用 BeautifulSoup 时,即使我可以使用 ctrl-F 找到它,它也无法找到此信息。谁能建议我如何使用 Python/BeautifulSoup 在名为floatShares 的变量中捕获数字数据8733446536

谢谢

【问题讨论】:

  • 告诉我们你到目前为止都做了什么
  • 您在页面源中找到的 JSON 数据似乎在 javascript <script> 标记中。您可以使用 BeautifulSoup 提取脚本的内容,但需要其他内容才能提取/解析/执行 javascript 代码以获取您所追求的特定行。
  • 您可以使用this 来获取和解析数据。
  • 我没有发布代码,因为我根本不知道如何获取我提到的数据项类型。这就是我所拥有的。我不知道如何解析内容以获取变量。 stocksoup = requests.get("https://finance.yahoo.com/quote/GE/key-statistics") soup = BeautifulSoup(stocksoup.content, "html.parser")
  • @anjsimmo,感谢您的评论。您对 javascript 的看法是正确的 - 我会尝试弄清楚。

标签: python beautifulsoup yahoo-finance


【解决方案1】:

您可以使用re/json模块来提取数据。

例如:

import re
import json
import requests


url = 'https://finance.yahoo.com/quote/GE/key-statistics'

html_text = requests.get(url).text
data = json.loads(re.search(r'root\.App\.main = (.*?\});\n', html_text).group(1))

# uncomment this to print all data:
# print(json.dumps(data, indent=4))

print(data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']['floatShares'])

打印:

{'raw': 8733446536, 'fmt': '8.73B', 'longFmt': '8,733,446,536'}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2016-10-13
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多