【问题标题】:SEC EDGAR 13F source HTTPError: HTTP Error 403: ForbiddenSEC EDGAR 13F 源 HTTPError:HTTP 错误 403:禁止
【发布时间】:2022-01-18 22:39:33
【问题描述】:

请帮助,SEC EDGAR 一直到现在都可以完美运行。它给出了 HTTPError: HTTP Error 403: Forbidden

import pandas as pd
tables = pd.read_html("https://www.sec.gov/Archives/edgar/data/1541617/000110465920125814/xslForm13F_X01/infotable.xml")
df=tables[3] 
df

【问题讨论】:

  • 该页面上只有一个表;这是问题中的正确网址吗?
  • 不是吗?有 3 个至少一个标题,下一个在右下角,最后一个是我需要的
  • 我的猜测是它会将您识别为机器人并阻止您。可能需要使用不同的技术来访问页面以模仿人类(使用标题、硒等)。此外,此页面上有 4 个表,如果您正在寻找主要数据块,它实际上现在在 table[4] 中。

标签: pandas dataframe parsing beautifulsoup http-status-code-403


【解决方案1】:

该网站似乎拒绝了您的请求,因为它检测到该请求是自动的。如果将标头 User-Agent: Mozilla/5.0 添加到 http 请求中,则可以绕过此问题,因为这会使请求看起来像是来自 firefox 浏览器。不幸的是,pd.read_html 不支持更改请求标头,因此我们必须使用请求库自己发出请求。

使用pip install requests 安装请求

然后将您的代码更改为如下所示:

import pandas as pd
import requests

# Makes a request to the url
request = reqeusts.get("https://www.sec.gov/Archives/edgar/data/1541617/000110465920125814/xslForm13F_X01/infotable.xml", headers={"User-Agent": "Mozilla/5.0"})

# Pass the html response into read_html
tables = pd.read_html(request.text)

df = tables[3] 
print(df)

我注意到该站点的一件事是它不允许来自非住宅 IP 地址的请求,并且总是会给您一个 403。因此,如果您在云中的某处执行此代码(例如 repl.it,通过vpn 或类似的)此代码根本不起作用。在我的家用电脑上运行它,这段代码可以完美运行。该网站还表示,如果您每秒发出超过 10 个请求或总体请求数量过多,它将阻止您的 IP 地址,因此请务必小心翼翼地向网站发出请求的次数。

【讨论】:

  • 亲爱的 Themis,非常感谢您详尽的回答,您是个天才,一切正常!
  • @IgBell 我真的很高兴能帮到你,现在你的项目一切正常!也谢谢你的好话,我很受宠若惊。祝您度过愉快的一天!
猜你喜欢
  • 2012-10-14
  • 2023-03-12
  • 2012-10-29
  • 2013-12-30
  • 2021-06-02
  • 2021-11-22
  • 2020-06-17
  • 1970-01-01
  • 2021-06-05
相关资源
最近更新 更多