JSONDecodeError: Expecting value: line 1 column 1 (char 0) when scaping SEC EDGAR

JSONDecodeError: Expecting value: line 1 column 1 (char 0) when scaping SEC EDGAR

我的代码如下:

import requests
import urllib
from bs4 import BeautifulSoup

year_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/index.json"
year_content = requests.get(year_url)
decoded_year_url = year_content.json()

去年我可以 运行 完全相同的代码,但是当我昨天 运行 它时,警告弹出: “JSONDecodeError:期望值:第 1 行第 1 列(字符 0)” 为什么?我应该如何解决这个问题?非常感谢!

显然,根据 2021 年 5 月 GitHub issue,SEC 已将 rate-limiting 添加到他们的网站。您收到错误消息的原因是响应包含 HTML,而不是 JSON,这会导致 requests 在调用 .json().

时引发错误

要解决此问题,您需要将 User-agent header 添加到您的请求中。我可以通过以下方式访问 JSON:

import requests
import urllib
from bs4 import BeautifulSoup

year_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/index.json"
year_content = requests.get(year_url, headers={'User-agent': '[specify user agent here]'})
decoded_year_url = year_content.json()

尝试导入 json 模块并使用方法 json.loads()

import requests
import urllib
from bs4 import BeautifulSoup
import json

year_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/index.json"
year_content = requests.get(year_url)
decoded_year_url = json.loads(year_content)