TDnet(適時開示情報閲覧サービス)のサイトとHTML構造
URL
トップページ:https://www.release.tdnet.info/inbs/I_main_00.html
アクセスした日に公表された一覧が表示される。指定日の一覧:https://www.release.tdnet.info/inbs/I_list_001_20200505.html
指定日(2020/5/5)に公表された一覧が表示される。100件以上あればURLは002, 003,...と対応していく。開示情報検索:https://www.release.tdnet.info/onsf/TDJFSearch/TDJFSearch
日付・キーワードのパラメーターと一緒にPOSTすると、検索結果が返ってくる。単体でアクセスしても何も表示されない。
BeautifulSoup等で解析する場合、2もしくは3を使うと便利である。
2のケース
URLの001と20200505の部分を任意の値にしBeautifulSoupで解析。日付は1か月程度さかのぼることができる。解析のポイント
各要素のクラス名
各要素においてoddnew-hogeとevennew-hogeと偶奇でクラス名が異なっておりsoup.hoge.find(class_=['oddnew-M kjCode','evennew-M kjCode'])
とするとまとめて取得できる。日付
HTMLのテーブルには時刻しか含まれないので、解析した時刻に加えURLで指定した日付をこのような形で変換する。
import datetime as dt
dt.datetime.strptime(DATE + TIME, '%Y/%m/%d %H:%M')
PDFやURLのリンク
soup.hoge.find(class_=hoge).find('a').get('href')
とaタグをはさんでhrefをgetすると取得できる。ただし、これは途中からの部分的なURLなので'https://www.release.tdnet.info/inbs/'を先頭につける必要がある。不要な空白
会社名、上場取引所、更新履歴には不要な空白が含まれるので'文字列'.str.strip()
として取り除く。
3のケース
response = requests.post('https://www.release.tdnet.info/onsf/TDJFSearch/TDJFSearch', data=data)
としてresponse.text
をBeautifulSoupで解析する。dataがパラメーターとなっており、data = { 't0': 20200430, 't1': 20200501, 'q': u'業績予想', 'm': '0' }
とすると、'業績予想'をキーワードに含む2020/4/30~2020/5/1に発表された一覧が取得できる。
日本語など他バイト文字の場合、uを文字列の前につけないとエラーとなる。残りは2のケースと構造はおおむね同じである。