【问题标题】:How to scrape for multiple quotes from Yahoo using Beautiflul Soup如何使用 Beautifulsoup 从雅虎获取多个报价
【发布时间】:2020-06-13 03:16:30
【问题描述】:

我正在尝试从 Yahoo Finance 中获取多个报价,而不仅仅是一次。我感兴趣的只是获取股票价格。我已经搜索了 Beautiful Soup 提供的 html,但我找不到正确的标签来获取价格,甚至在 HTML 中也找不到价格。谁能给我 Beautifulsoup 命令用于获取股票表?
这是我用来测试的 URL。 https://finance.yahoo.com/quotes/AAPL,WYNN,PCB,AMZN,USAK/view/v1

【问题讨论】:

  • 可能页面使用 JavaScript 添加元素,但 requests/Beautifulsoup 无法运行 JavaScript,您可能需要 Selenium 来控制可以运行 JavaScript 的 Web 浏览器。但首先你应该检查雅虎金融是否没有 API,并且应该有特殊的 Python 模块来获取数据而无需抓取。
  • 查看模块 yahoo-financeyfinance
  • 感谢您的回复。我之前尝试过 yahoo-finanace 和 yfinance,但它们没有提供一种方法(至少我还没有找到一种方法)来简单地获取多个符号的当前价格。一次调用一个符号需要很长时间。这就是为什么我想我会尝试刮。如果无法完成,请再次感谢您的回复。
  • yahoofinancials 可以做YahooFinancials(['AAPL','WYNN','PCB','AMZN','USAK']) 但它需要一些时间 - 可能它会在单独的请求中获取所有数据。当我在 Chrome/Firefox 中使用 DevTools 检查链接中页面上使用的请求时,我看到它还为每个符号发送单独的请求。但也许它可以访问更快的计算机query1.finance.yahoo.com/v7/finance/…
  • 直接使用来自query1.finance.yahoo.com/v7/finance/… 的数据应该比抓取页面更快 - 但可能它可能需要一些其他信息(即 cookie),例如在真正的网络浏览器中。

标签: python beautifulsoup screen-scraping


【解决方案1】:

当我在Chrome/Firefox 中使用DevTools 作为页面时

https://finance.yahoo.com/quotes/AAPL,WYNN,PCB,AMZN,USAK/view/v1 

然后我看到它为每个符号发送单独的请求,并且它使用类似的 url

https://query1.finance.yahoo.com/v7/finance/spark?symbols=AAPL&range=1d&interval=5m&indicators=close&includeTimestamps=false&includePrePost=false&corsDomain=finance.yahoo.com&.tsrc=finance

python 也一样,速度很快。

我只是担心它可能需要一些其他元素 - 即。 cookie - 防止在多次请求后阻塞。

import requests

for symbol in ['AAPL', 'WYNN', 'PCB', 'AMZN', 'USAK']:
    params = {
        'symbols': symbol,
        'range': '1d',
        'interval': '5m',
        'indicators': 'close',
        'includeTimestamps': 'false',
        'includePrePost': 'false',
        'corsDomain': 'finance.yahoo.com',
        '.tsrc': 'finance'
    }

    url = 'https://query1.finance.yahoo.com/v7/finance/spark'

    r = requests.get(url, params=params)
    data = r.json()

    print('---', symbol, '---')
    print(data['spark']['result'][0]['response'][0]['indicators']['quote'][0]['close'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多