批量下载SEC文件

secutils的Python项目详细描述


made-with-pythonBuild StatusPyPI version

欢迎来到secutils

secutils是一个实用程序包,用于帮助大量下载SEC文档。它可以处理任何SEC文档类型,如果需要,将检索整个历史数据库。多线程文件下载在命令行实用程序中启用。在

关键功能包括:

  • 多线程下载
  • 索引文件的缓存
  • 自动目录结构构建(即下载带有目录结构的多个文件类型:ftype-->;year-->;quarter-->;files)
  • 继续下载
  • 内置日志记录和下载成功跟踪器

自述文件概述:

动机

secutils从其他一些回购协议停止的地方接手。有几秒钟的时间可以下载python包,但是它们是通过检索少数文档设计的。我需要一种方法来一致地从SEC下载最新更新,并为某些文件类型保护SEC的整个历史记录的本地副本。这就转化为TB的文档,在这些文档中,会出现网络、目录结构、日志记录等问题。在

有一个很好的包可以下载和构造索引文件,但是用户仍然可以下载实际的文件,并且必须熟悉bash脚本。在

使用secutils程序处理已经检索到的文件,获取本地存档中没有的丢失文件,然后继续。在

其他回购的例子如下:

此外,这个包的希望是为表示形式类型创建解析器。用户可以导入10-K解析器并调用管理讨论和分析方法,从选定的文件中检索相应的MD&A。在

考虑到这些申请的规模,也有计划直接与流行的云提供商集成。仅处理10-K/Q就需要TB的存储空间。在

安装

安装sec-utils有两种主要方法。第一种方法是通过python打包索引(pypi)。第二种是直接从源头来的。在

要从pypi安装:

pip install secutils

从和源安装:

^{pr2}$
用法
conda activate sec_env
python download_sec.py --output_dir=/mnt/sda/sec --form_types=S-1 --num_workers=-1 --start_year=2014 --end_year=2019 --quarters 1234

更清晰地说,您可以通过修改example script来协调长时间运行的作业并跟踪参数

确保它在您的系统上可执行:

chmod +x run.sh
./run.sh

您还可以生成一个配置文件,并使用该配置来控制较长时间运行的参数:

fromsecutils.utilsimportgenerate_configpath_for_config=''generate_config(path_for_config)

然后,当调用较长的下载运行时:

python -m secutils.download_sec --config_path='path_for_config'

使用远程服务器时,一个有用的技巧是将输出从会话定向到文件。即使断开与ssh的连接,使用screen也可以维护会话:

screen -dm -L python -m secutils.download_sec --config_path='path_for_config'

此外,用户可以直接利用API进行更多的实际操作。概述位于example jupyter notebook中,其他详细信息如下:

fromsecutils.edgarimportFormIDXform=FormIDX(year=2017,quarter=1,seen_files=None,cache_dir=None,form_types=['10-K])files=form.index_to_files()form.master_index.head()# CIK	Company Name	Form Type	Date Filed	Filename	fname# 1000015	META GROUP INC	10-K	1998-03-31	edgar/data/1000015/0001000015-98-000009.txt	0001000015-98-000009.txt# 1000112	CHEVY CHASE MASTER CREDIT CARD TRUST II	10-K	1998-03-27	edgar/data/1000112/0000920628-98-000038.txt	0000920628-98-000038.txt# 1000179	PARAMOUNT FINANCIAL CORP	10-K	1998-03-30	edgar/data/1000179/0000950120-98-000108.txt	0000950120-98-000108.txt# lets take a peek at attributes available to individual files:ex=files[0]msg=f"""      Company Name: {ex.company_name}      CIK Number: {ex.cik_number}      Date Filed: {ex.date_filed}      Form Type: {ex.form_type}      File Name: {ex.file_name}      Download URL: {ex.file_download_url}      """print(msg)# Company Name: OPTICAL CABLE CORP# CIK Number: 1000230# Date Filed: 2017-12-20 00:00:00# Form Type: 10-K# File Name: 0001437749-17-020936.txt# Download URL: https://www.sec.gov/Archives/edgar/data/1000230/0001437749-17-020936.txt                                                                        # get example file and download:# to download our example file:output_dir='.'ex.download_file(output_dir)# 200 is a successful download# verify download importoslist(filter(lambdax:x.endswith('txt'),os.listdir(output_dir)))# ['0001437749-17-020936.txt']

实际操作非常好,但是使用CLI确实提供了几个优势:

  • 自动目录结构创建
  • 内置缓存和日志记录
  • 通过下载扫描恢复训练的能力
  • 多线程文件下载
视觉

这个项目的远景远远超出了从Edgar数据库下载索引和SEC文件的当前状态。目前,解析SEC文件非常困难。造成这些困难的原因有很多,包括:

  • 证券交易委员会的文件没有系统的标签结构
  • 这些年来提交的文件发生了变化
  • 从一个文件类型到另一个文件类型有许多不同的文件类型、标题类型和内容

鉴于上述情况,解析10-K甚至需要大量的工作。这个项目的目标是把志同道合的我个体化,并尝试使用一致的API进行系统的解析工作。该项目的未来状态将允许用户下载SEC文件,并使用方便的方法检索文件的特定部分。例如,用户可以执行以下操作:

fromsecutils.file_typesimportfile_10kfile_path='/path/to/10-K'f=file_10k.from_path(file_path)# and retrieve the management discussion and analysis section directly:f.management_discussion()# Here at XYZ company, we believe the following year will bring about great properity due to our R&D efforts in packages like secutils...

这将为合作、文本分析研究和一般商业信息收集打开一个机会的世界。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
交换数组中重复值的位置(Java)   java搜索使用百分比匹配Elasticsearch SpringBoot中的文本   java Spring JPA和按输入字段排序   java我在输入CSV时出错了   java如何在RecyclerView中精确显示5项   使用java安全吗。util。servlet中的计时器?   使用Cp1252编码的java比较字符串   javafx打包java桌面应用程序,并引用开源许可证   java Spring和Camel CXF在战争中表现出色   java当EJB客户端失去与应用服务器的连接时,是否存在可以捕获的异常?   更改字符串值的java注释   java如何在sharedperfernce中保存自定义数组列表   RequestResponseLink:当使用java客户端读取队列时,Azure服务总线上RequestResponseLink到“$cbs”的内部发送链接因错误而关闭