我应该如何在 EDGAR 上抓取 idx 文件?

How should I scrape an idx file on EDGAR?

我有一个 idx 文件: https://www.sec.gov/Archives/edgar/daily-index/2020/QTR4/master.20201231.idx

一年前我可以用下面的代码打开idx文件,但现在这些代码不起作用了。这是为什么?我该如何修改代码?

import requests
import urllib
from bs4 import BeautifulSoup

master_data = []
file_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/QTR4/master.20201231.idx"
byte_data = requests.get(file_url).content
data_format = byte_data.decode('utf-8').split('------')
content = data_format[-1]
data_list = content.replace('\n','|').split('|')

    for index, item in enumerate(data_list):

        if '.txt' in item:
            if data_list[index - 2] == '10-K':
                entry_list = data_list[index - 4: index + 1]
                entry_list[4] = "https://www.sec.gov/Archives/" + entry_list[4]
                master_data.append(entry_list)

print(master_data)

如果您检查了 byte_data 变量的内容,您会发现它没有 idx 文件的实际内容。它的存在基本上是为了防止像您这样的抓取机器人。您可以在此答案中找到更多信息:Problem HTTP error 403 in Python 3 Web Scraping

在这种情况下,您的答案是只使用 header 中的 User-Agent 作为请求。

import requests

master_data = []
file_url = r"https://www.sec.gov/Archives/edgar/daily-index/2020/QTR4/master.20201231.idx"
byte_data = requests.get(file_url, allow_redirects=True, headers={"User-Agent": "XYZ/3.0"}).content

# Your further processing here

附带说明一下,您的处理不会打印任何内容,因为任何行都不满足 if 条件,所以不要认为此解决方案不起作用。