EDINETから資料(PDF、XBRL)データをダウンロードするpythonのコードです。
元々過去3年分しかデータダウンロードできなかったですが、2023年から過去10年分のデータがダウンロードできるようになりました。
2023/1/4(水)時点で2013/1/4のデータがダウンロードできました。
以下コードになります.
import sys import requests import pandas as pd from pathlib import Path def main(): args = sys.argv for index_date, date_ymd in enumerate(args[1:]): # YYYYMMDD形式→YYYY-MM-DD形式に変換 date = '{}-{}-{}'.format(date_ymd[:4], date_ymd[4:6], date_ymd[6:]) # URL・引数定義(書類一覧取得) list_url = 'https://disclosure.edinet-fsa.go.jp/api/v1/documents.json' list_params = { 'date': date, 'type': '2' } # ファイル一覧をEDINETから取得 doc_list = requests.get(list_url, list_params).json() df = pd.DataFrame(doc_list['results']) count = len(doc_list['results']) # print("{}処理件数:{}件".format(date, len(doc_list['results']))) # ファイル一覧をCSV形式で保存 list_path = "./edinet_doc/list/" list_file = "doc_list_{}.csv".format(date_ymd) Path(list_path).mkdir(parents=True, exist_ok=True) df.to_csv("{}/{}".format(list_path, list_file), encoding='utf_8_sig') for index_doc, row in df.iterrows(): print("{} : {}/{}".format(date, str(index_doc + 1), str(count))) doc_id = row['docID'] # 銘柄コード・銘柄名(提出者名)・書類名を取得 if row['secCode'] is None: code = 'zzzz' else: code = str(row['secCode'])[:4] if row['filerName'] is None: name = 'no_name' else: name = row['filerName'].replace(' ', '').replace(' ', '') if row['docDescription'] is None: description = 'no_title' else: description = row['docDescription'].replace(' ', '').replace(' ', '') # URL・引数定義(書類取得) doc_url = "https://disclosure.edinet-fsa.go.jp/api/v1/documents/{}".format(doc_id) pub_param = {'type': '1'} pdf_param = {'type': '2'} at_param = {'type': '3'} en_param = {'type': '4'} # 提出本文書及び監査報告書 pub_path = "./edinet_doc/xbrl/{}/".format(date_ymd) pub_file = "{}_{}_{}.zip".format(code, name, description) get_file(pub_path, pub_file, doc_url, pub_param) # PDFファイル pdf_path = "./edinet_doc/pdf/{}/".format(date_ymd) pdf_file = "{}_{}_{}.pdf".format(code, name, description) get_file(pdf_path, pdf_file, doc_url, pdf_param) # 提出本文書及び監査報告書 at_path = "./edinet_doc/attach/{}/".format(date_ymd) at_file = "{}_{}_{}.zip".format(code, name, description) get_file(at_path, at_file, doc_url, at_param) # 英文ファイル en_path = "./edinet_doc/en/{}/".format(date_ymd) en_file = "{}_{}_{}.zip".format(code, name, description) get_file(en_path, en_file, doc_url, en_param) # break def get_file(path, file, url, param): Path(path).mkdir(parents=True, exist_ok=True) docs = requests.get(url, param) if docs.headers['Content-Type'] != "application/json;charset=utf-8": file = open(path + file, "wb") file.write(docs.content) if __name__ == "__main__": main()
コメントを残す