【问题标题】:Web Scraping Stock Ticker Price from Yahoo Finance using BeautifulSoup使用 BeautifulSoup 从 Yahoo Finance 抓取股票代码价格
【发布时间】:2021-12-20 18:39:11
【问题描述】:

我正在尝试从 Yahoo! 获取 Gold 股票代码财务。

from bs4 import BeautifulSoup
import requests, lxml

response = requests.get('https://finance.yahoo.com/quote/GC=F?p=GC=F')
soup = BeautifulSoup(response.text, 'lxml')
gold_price = soup.findAll("div", class_='My(6px) Pos(r) smartphone_Mt(6px)')[2].find_all('p').text

每当我运行它时,它都会返回:list index out of range。 当我执行print(len(ssoup)) 时,它会返回4。

有什么想法吗? 谢谢。

【问题讨论】:

  • 离开this这里
  • 谢谢您,先生,但我没有看到任何获得与黄金相关的头条新闻的方法,这是我正在尝试做的。
  • 请edit您的问题显示您的预期输出

标签: python web-scraping beautifulsoup yahoo-finance


【解决方案1】:

您可以直接向 yahoo 服务器发出请求。要找到查询 URL,您需要通过 Dev tools (F12) -> Fetch/XHR -> find name: spark?symbols= 打开网络选项卡(如果没有看到,请刷新页面),找到所需的符号,然后在右侧新打开的选项卡上查看响应(预览选项卡)。

如果请求方法是GET,您可以直接向所有这些链接发出请求,因为POST 方法要复杂得多。

您需要json 和requests 库,不需要bs4。请注意,发出大量此类请求可能会阻止您的 IP( 或设置 IP 速率限制),或者您不会收到任何响应,因为他们的系统可能会检测到它是机器人,因为普通用户不会' t 反复向服务器发出此类请求。所以你需要弄清楚如何绕过它。

更新: 在 X 时间段内可以发出多少请求可能存在硬性限制。


代码和example in the online IDE(包含完整的 JSON 响应):

import requests, json

response = requests.get('https://query1.finance.yahoo.com/v7/finance/spark?symbols=GC%3DF&range=1d&interval=5m&indicators=close&includeTimestamps=false&includePrePost=false&corsDomain=finance.yahoo.com&.tsrc=finance').text
data_1 = json.loads(response)

gold_price = data_1['spark']['result'][0]['response'][0]['meta']['previousClose']
print(gold_price)

# 1830.8

附:有一个关于我的scraping Yahoo! Finance Home Page 的博客,有点相关。

【讨论】:

    猜你喜欢
    • 2020-07-08
    • 2018-01-02
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2021-12-12
    • 2021-03-02
    相关资源
    最近更新 更多