【问题标题】:How can I download the CSV file from a Bank of England webpage using Python?如何使用 Python 从英格兰银行网页下载 CSV 文件?
【发布时间】:2023-01-30 04:14:21
【问题描述】:

我想在此页面上以编程方式下载官方银行利率历史记录的 CSV 文件:https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp 有一个标记为 CSV 的链接,单击该链接可下载文件。 我认为单击链接必须运行一些 javaScript 来下载文件,就像我复制它转到的链接地址时一样:https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp#

【问题讨论】:

  • 好的,那么到目前为止您尝试了什么?
  • 您可以使用selenium 下载该文件。
  • Andrew Ryan,您将如何使用硒?我试过但无法让它工作。

标签: python web-scraping


【解决方案1】:

这是将数据获取为 csv 的一种方法:

import pandas as pd

df = pd.read_html('https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp')[0]
df.to_csv('boe_rates.csv')
print(df)

编辑:这是另一种方式,使用 Requests 和 Pandas(仍然避免了 Selenium 的开销):

import requests
import pandas as pd

headers = {
    'accept-language': 'en-US,en;q=0.9',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}

url = 'https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp'
df = pd.read_html(str(requests.get(url, headers=headers).text))[0]
df.to_csv('boe_rates.csv')
print(df)

在这两种情况下,终端中的结果(也保存为 csv 文件)是相同的:

    Date Changed    Rate
0   15 Dec 22   3.50
1   03 Nov 22   3.00
2   22 Sep 22   2.25
3   04 Aug 22   1.75
4   16 Jun 22   1.25
... ... ...
242 10 Mar 75   10.25
243 17 Feb 75   10.50
244 10 Feb 75   10.75
245 27 Jan 75   11.00
246 20 Jan 75   11.25
247 rows × 2 columns

您可以找到 Pandas 文档here

【讨论】:

  • 我试过你的代码,它只是错误“urllib.error.HTTPError:HTTP 错误 500:内部服务器错误”是否可以模拟按下 BoE 页面上的“CSV”链接/按钮来下载 csv 文件?
  • 是的,有可能@JonathanRoberts - 使用 Selenium。当然,没有必要使用 Selenium,因为我发布的解决方案有效。再试一次 - 有时它会超时,但它有效。
  • 当我尝试您的解决方案时,它立即收到错误:urllib.error.HTTPError: HTTP Error 500: Internal Server Error。没有等待,所以这不是超时。
  • 我认为 500 错误可能是在页面下载之前期望数据存在?我在 requests.get 中遇到了同样的错误,但是当我添加 headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari /537.36'} page = requests.get(url, timeout=5, allow_redirects=True, headers=headers) 它返回了页面。 pd.read_html 有类似的东西吗?
猜你喜欢
  • 2019-01-15
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多