最新
tabula
tabulaでブラウザで範囲を指定してPDFからTSV変換できます。
コマンド用
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作成手順
- https://github.com/tabulapdf/tabula-javaからtabula-1.0.1-jar-with-dependencies.jarをダウンロード
- 下記プログラムを上記ファイルと同じフォルダに入れて実行
- 最新の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)