Edited at

上場会社一覧を取得して有報キャッチャーのatomを閲覧するまわり(XBRL取得の準備など)


qiita.py


#事前処理
#!pip list
!pip install -q xlrd
###############################################

from google.colab import files

import google.colab
import googleapiclient.discovery
import googleapiclient.http

import os
#import datetime
import requests
from bs4 import BeautifulSoup
import time

import pandas as pd

def fn_fuga(sic):

### 有報キャッチャーの閲覧 ###
start = time.time()
print(sic)

url = 'http://resource.ufocatch.com/atom/edinet/query/'+str(sic) + '0'
r = requests.get(url)

soup = BeautifulSoup( r.text,'html.parser')
tbl = soup.find_all("entry")

if len(tbl) > 0:print("処理を開始します")
## 本処理:XBRLをダウンロードしてファイルをパースして値を取得 [後編に続く] ##

time.sleep(3)
e_time = time.time() - start
print ("endpoint_time:{0}".format(e_time) + "[sec]")

def fn_hoge(sc):

### 取得銘柄リストの生成###

#JPXの東証上場一覧のページへのアクセス
url= 'https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls'
os.system('wget '+ str(url)+' -O data_j.xls -a wget-log')

## pandasでexcelファイルの読み込みとdf整形など
df = pd.read_excel( "data_j.xls" )
df.columns = ['date','code','name','lst','sectorCode','sectorName', 'flr1', 'flr2', 'flr3', 'flr4']
drop_col = ['flr1', 'flr2', 'flr3', 'flr4']
df = df.drop(drop_col , axis=1)
df = df[df['sectorCode'] !='-']
df = df[df['lst'] !='PRO Market']

ec = sc+100
df = df[df['code'] >=sc]
df = df[df['code'] <=ec]
lst = [i for i in df['code']]
print( lst )
x =[fn_fuga(sic) for sic in lst]
print(len(lst))
# main
if __name__ == '__main__':

total_star = time.time()

sc = 1301
if len(str(sc))==4:fn_hoge(sc)

elapsed_time = time.time() - total_star
print ("total_time:{0}".format(elapsed_time) + "[sec]")


 有価証券報告書のXBRLファイルを取得してパースしたい場合は、有報キャッチャーにて取得可能です。(他のサイトだと、日経電子版の各銘柄ページのリリース状況にEDINET提出書類としてpdfとXBRLファイルが置いてあります)

 有報キャッチャーのatomのURLで、企業コード(=証券コード+'0'の5桁のコード)を指定してあげると、該当銘柄の提出書類のXBRLやpdfのURL一覧が閲覧可能。例えば1301極洋の提出書類を閲覧したい場合は、「13010」で閲覧可能。

 仮に存在しない証券コード(例えば13020など)を指定してatomのURLを実行しても、スカスカの結果が変えるだけ、entryタグが存在しないなので、普通に1301から9999までrange(1301,9999)でforループを実行しても問題ないかと思うけれど、存在しないコードをわざわざ検索しにいくのも無駄といえば無駄なので、上記スクリプトでは最初に東証HPにて公開されている月次の上場会社一覧エクセルファイルをwgetで取得して、pandasでread_excel()でdfを生成した上で、ループ処理で有報キャッチャーatom_URLを閲覧しにいっています。

 なお東証HPにて公開されている月次の上場会社一覧エクセルファイルは、J-REITやETF、インフラファンドなども含まれているので、上記ではSectorCode='-'でそれら銘柄を除外し、なおかつPROマーケット銘柄も市場名で判定して除外しております。