SEC EDGAR 13F 源 HTTPError:HTTP 错误 403:禁止

Posted

技术标签:

【中文标题】SEC EDGAR 13F 源 HTTPError:HTTP 错误 403:禁止【英文标题】:SEC EDGAR 13F source HTTPError: HTTP Error 403: Forbidden 【发布时间】: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] 中。 【参考方案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,通过*** 或类似的)此代码根本不起作用。在我的家用电脑上运行它,这段代码可以完美运行。该网站还表示,如果您每秒发出超过 10 个请求或总体请求数量过多,它将阻止您的 IP 地址,因此请务必小心翼翼地向网站发出请求的次数。

【讨论】:

亲爱的 Themis,非常感谢您详尽的回答,您是个天才,一切正常! @IgBell 我真的很高兴能帮到你,现在你的项目一切正常!也谢谢你的好话,我很受宠若惊。祝您度过愉快的一天!

以上是关于SEC EDGAR 13F 源 HTTPError:HTTP 错误 403:禁止的主要内容,如果未能解决你的问题,请参考以下文章

使用 SEC Edgar Logfile 数据库 // 大型数据库的 ZIP 文件提取和存储

如何使用美丽的汤来刮掉SEC的Edgar数据库并接收欲望数据

从不同的 HTML 表中提取数据

活动类 yodgobekkomilov.edgar.com.githubapi/yodgobekkomilov.edgar.com.githubapi.SearchActivity 不存在

13F:图像分割

从 HTML、CSS 和 JavaScript 中获取干净的字符串