1

我有一个 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)
4

1 回答 1

0

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

在这种情况下,您的答案是只在请求的标头中使用 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 条件,所以不要认为这个解决方案不起作用。

于 2022-01-12T05:24:12.940 回答