【问题标题】:How to download dictionary from url?如何从网址下载字典?
【发布时间】:2021-12-01 04:35:05
【问题描述】:

我想从以下网址下载字典:https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json

这样做的原因是因为我想从字典中提取一些数据到熊猫 df 中。它应该是这样的:

filed_date   filed_periode   form    accn
2020-11-01   Q4              10-K    0001193125-15-153166
2020-08-01   Q3              10-Q    0001193125-15-153112

我可以使用以下代码从另一个 SEC 链接中提取字典:

import pandas as pd
import urllib
import json

url1 = 'https://www.sec.gov/files/company_tickers_exchange.json'

sec_dict = urllib.request.urlopen(url1)
for line in sec_dict:
    decoded_line = line.decode("utf-8")
company_dict = json.loads(decoded_line)

如果将上述代码用于第一个 url,我将收到以下错误:

HTTPError: HTTP Error 403: Forbidden

我尝试了以下另一种方法,但得到了同样的错误:

import urllib.request

user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'

url = "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json"
headers={'User-Agent':user_agent,} 

request=urllib.request.Request(url,None,headers)
response = urllib.request.urlopen(request)
data = response.read()

提前感谢您的任何指点:-)

【问题讨论】:

  • 一般来说,forbidden 就是它所说的意思。该网站正在阻止您的请求。有些网站不欢迎程序化访问,并竭尽全力阻止您这样做。也可能是您的代码在短时间内发出了太多请求,而您达到了一些限制。
  • 您正在尝试的用户代理(Firefox 3,从 2009 年开始)已被自动化工具广泛使用,以至于它也被 SEC 的自动化安全性所禁止。 (另外,请阅读您通过 Forbidden 响应获得的响应。它解释了所有这些。)尝试其他方法。
  • 看起来您遇到的错误与使用自动化工具有关:jsfiddle.net/dyb0sjr2
  • 为了拿到货,得好好恶搞一下

标签: python json pandas url


【解决方案1】:

SEC 对用户代理字符串有不同寻常的要求。他们希望它的格式为Sample Company Name AdminContact@<sample company domain>.com

所以对我来说,一个合规的用户代理应该是:

user_agent = 'Dan Monego <myemail>@<emailservice>'

更改用户代理以包含您的姓名和电子邮件。

【讨论】:

  • 感谢您的回答。有用。您是否有从 SEC 下载数据的简短指南?有什么好的网页吗?提前谢谢你
  • 这里有一个简短的指南:sec.gov/os/accessing-edgar-data
猜你喜欢
  • 2019-04-17
  • 2012-02-02
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多