【问题标题】:Web Scraping with interacting webpage带有交互网页的网页抓取
【发布时间】:2021-05-18 16:22:57
【问题描述】:

我正在做一个需要财务数据的项目,我需要从雅虎财务中抓取历史数据,但是例如该页面中的https://finance.yahoo.com/quote/ETH-USD/history?p=ETH-USD,我需要调整时间间隔并按下下载按钮,我该怎么做用蟒蛇?我应该自动完成这项任务。

对不起,我的语法错误,我的母语不是英语。

【问题讨论】:

标签: python web-scraping


【解决方案1】:

为了让你从雅虎财经中提取数据,你可以使用一个名为yfinance的python库

在你的情况下,通过使用这个库你可以这样做:

import yfinance as yf

tickers = yf.Tickers('ETH')

eth_history = tickers.tickers.ETH.history(period="1y")

然后你可以对这些数据做任何你想做的事情(例如保存在电子表格中)。

【讨论】:

  • 最近在我自己的项目中使用了yfinance,这个解决方案应该很好用。时间间隔可以通过period 轻松调整,如下所示
【解决方案2】:

您可以使用实现 Chrome DevTools 协议 (CDP) 的库来自动化 Chrome 浏览器或无头 Chromium 浏览器(或任何支持此协议的浏览器)。

这是我通过搜索找到的一个库:https://github.com/hyperiongray/trio-chrome-devtools-protocol,但我相信还有其他的。我个人没有用过。

【讨论】:

    【解决方案3】:

    您可以使用 Selenium WebDriver 加载页面,WebElement 包含下载按钮和 click() 它,但与直接调用 API 相比,这将是一个缓慢而脆弱的解决方案。

    我解决这个问题的方法是对 Yahoo Finance URL 进行逆向工程,并使用 Requests 库获取数据。结果是包含您正在查找的历史数据的 CSV。

    如果您查看下载 URL...URL 查询参数相当直观易懂。

    https://query1.finance.yahoo.com/v7/finance/download/ETH-USD?period1=1581795382&period2=1613417782&interval=1d&events=history&includeAdjustedClose=true

    我们可以看到要修改的关键组件是股票代码、日期范围和间隔。在代码中...

    import csv
    from datetime import datetime, timedelta
    from io import StringIO
    
    import requests
    
    
    ticker = 'ETH-USD'
    url = f'https://query1.finance.yahoo.com/v7/finance/download/{ticker}'
    now = datetime.now()
    start_ts = int((now - timedelta(days=365)).timestamp())
    end_ts = int(now.timestamp())
    params = {
        'period1': start_ts,
        'period2': end_ts,
        'interval': '1d',
        'events': 'history',
        'includeAdjustedClose': True,
    }
    
    result = requests.get(url, params=params)
    
    f = StringIO(result.content.decode('utf-8'))
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        print('\t'.join(row))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-06
      • 2020-06-18
      • 2022-08-14
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多