TDnet(適時開示情報閲覧サービス)のサイトとHTML構造

  • URL

    1. トップページ:https://www.release.tdnet.info/inbs/I_main_00.html
      アクセスした日に公表された一覧が表示される。

    2. 指定日の一覧:https://www.release.tdnet.info/inbs/I_list_001_20200505.html
      指定日(2020/5/5)に公表された一覧が表示される。100件以上あればURLは002, 003,...と対応していく。

    3. 開示情報検索: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のケースと構造はおおむね同じである。