厚生労働省のブラック企業リストをTSV変換

a244.hateblo.jp

tabulaでブラウザで範囲を指定してPDFからTSV変換できます。

tabula.technology

コマンド用

github.com

tabula-1.0.1-jar-with-dependencies.jarをダウンロードして

java -jar .\tabula-1.0.1-jar-with-dependencies.jar -o 170510-01.csv -p all -r .\170510-01.pdf

を実行

TSVだと改行でずれるのでいったんCSV保存してから改行削除等の加工をしてTSV保存するときれいにできます。

TSV作成手順

  1. https://github.com/tabulapdf/tabula-javaからtabula-1.0.1-jar-with-dependencies.jarをダウンロード
  2. 下記プログラムを上記ファイルと同じフォルダに入れて実行
  3. 最新のPDFをダウンロード後にTSVが作成
import csv
import os
import re
import shlex
import subprocess

import requests

url = 'http://www.mhlw.go.jp/kinkyu/dl/170510-01.pdf'

# ファイル名作成
filename = os.path.basename(url)

# ダウンロード
res = requests.get(url)

if res.status_code == requests.codes.ok:

    # ファイル保存
    with open(filename, 'wb') as fw:
        fw.write(res.content)

    cmd = 'java -jar tabula-1.0.1-jar-with-dependencies.jar -o 170510-01.csv -p all -r ' + filename
    args = shlex.split(cmd)
    p = subprocess.Popen(args)

    p.wait()

    with open('170510-01.csv', 'r') as fr:
        reader = csv.reader(fr, dialect='excel')

        header = ['企業・事業場名称', '所在地', '公表日', '違反法条', '事案概要', 'その他参考事項']

        data = []

        # 管轄 初期値
        dept_labor = ''

        # 最終更新日 初期値
        last_modified_date = ''

        # ヘッダー追加
        data.append(["管轄", "最終更新日"] + header)

        for row in reader:

            # 前後のスペース削除
            temp = [i.strip() for i in row]

            # ヘッダーはスキップ
            # 千葉労働局に「その他参考事項」がないので4まで比較
            if header[:5] == temp[:5]:
                continue

            if '最終更新日' in temp[0]:

                test = temp[0].replace('最終更新日:', ' ').split()

                dept_labor = test[-2]
                last_modified_date = test[-1]

            else:
                # 改行文字を削除
                for j in range(len(temp)):
                    temp[j] = re.sub('\n', '', temp[j])

                # 違反法条ごとにコンマ追加
                temp[3] = re.sub('条(の\d{1,3})?', lambda m: m.group(0) + ', ',
                                 temp[3]).rstrip(', ')

                # 送検後別項目があるとコンマ追加
                temp[5] = re.sub('H\d{1,2}\.\d{1,2}\.\d{1,2}',
                                 lambda m: ', ' + m.group(0),
                                 temp[5]).lstrip(', ')

                data.append([dept_labor, last_modified_date] + temp)

    with open('result.tsv', 'w') as fw:
        writer = csv.writer(fw, dialect='excel-tab', lineterminator='\n')
        writer.writerows(data)