gpt4 book ai didi

python - 列出超出 SEC 网络爬虫范围的索引

转载 作者:行者123 更新时间:2023-12-05 05:50:20 27 4
gpt4 key购买 nike

这里的 super 新手有一个 friend 帮助我制作了这个用于查看对冲基金 13fs 的网络爬虫。之前它运行良好,但最近我遇到了这个错误:

response_two = get_request(sec_url + tags[0]['href'])

IndexError: 列表索引超出范围

我不明白为什么这个索引不再起作用了。在访问 SEC 网站时,我一直试图通过浏览器控制台来解决这个问题,但我很难弄清楚。

完整代码如下:

import requests
import re
import csv
import lxml
import numpy as np
import pandas as pd
from bs4 import BeautifulSoup
sec_url = 'https://www.sec.gov'

def get_request(url):
return requests.get(url)

def create_url(cik):
return 'https://www.sec.gov/cgi-bin/browse-edgar?CIK={}&owner=exclude&action=getcompany&type=13F-HR'.format(cik)

def get_user_input():
cik = input("Enter CIK number:")
return cik

requested_cik = get_user_input()

# Find mutual fund by CIK number on EDGAR
response = get_request(create_url(requested_cik))
soup = BeautifulSoup(response.text, "html.parser")
tags = soup.findAll('a', id="documentsbutton")

# Find latest 13F report for mutual fund
response_two = get_request(sec_url + tags[0]['href'])
soup_two = BeautifulSoup(response_two.text, "html.parser")
tags_two = soup_two.findAll('a', attrs={'href': re.compile('xml')})
xml_url = tags_two[3].get('href')
response_xml = get_request(sec_url + xml_url)
soup_xml = BeautifulSoup(response_xml.content, "lxml")

# DataFrame
df = pd.DataFrame()
df['companies'] = soup_xml.body.findAll(re.compile('nameofissuer'))
df['value'] = soup_xml.body.findAll(re.compile('value'))

for row in df.index:
df.loc[row, 'value'] = df.loc[row, 'value'].text
df.loc[row, 'companies'] = df.loc[row, 'companies'].text
df['value'] = df['value'].astype(float)
df = df.groupby('companies').sum()
df = df.sort_values('value',ascending=False)
for row in df.index:
df.loc[row, 'allocation'] = df.loc[row, 'value']/df['value'].sum()*100
df['allocation'] = df['allocation'].astype(int)
df = df.drop('value', axis=1)
df

非常感谢!

最佳答案

脚本有两个问题:

  1. SEC 在其网站上添加了速率限制。 You aren't alone in facing this issue. .要解决此问题,请使用 HedgeHog 描述的修复程序。

  2. (不是实际问题——请参阅后续。) 您要查找的按钮的 id 是“documentbuttons”(复数),而不是“documentbutton”(单数)。因此,您需要更改要查找的 HTML 元素的 ID。

这个:

tags = soup.findAll('a', id="documentbutton")

应该是这样的:

tags = soup.findAll('a', id="documentsbutton")

错误应该消失了! (话虽如此,我无法验证数据框代码是否适用于这些请求,因为它在原始帖子中被截断了。)

关于python - 列出超出 SEC 网络爬虫范围的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70526253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com