https://cashless.go.jp/assets/doc/kameiten_touroku_list.pdf
- smallpdfは時間がかかりすぎてエラー
- tabulaもエラー ※500ページごとにすればできました(文字が切れてる)
- camelotは変換中のまま現在進行中(3時間経過)
市区町村で8文字以上あるところは以下の10件
埼玉県 さいたま市大宮区 埼玉県 さいたま市見沼区 埼玉県 さいたま市中央区 埼玉県 さいたま市浦和区 埼玉県 さいたま市岩槻区 神奈川県 横浜市保土ケ谷区 福岡県 北九州市小倉北区 福岡県 北九州市小倉南区 福岡県 北九州市八幡東区 福岡県 北九州市八幡西区
import csv import os import re import shlex import subprocess import requests # 保存データの種類 save = 1 # ダウンロード url = 'https://cashless.go.jp/assets/doc/kameiten_touroku_list.pdf' filename = os.path.basename(url) r = requests.get(url) if r.status_code == requests.codes.ok: # PDFファイルを保存 with open(filename, 'wb') as fw: fw.write(r.content) # コマンド実行 cmd = 'java -jar pdfbox-app-2.0.16.jar ExtractText -startPage 3 -sort -encoding UTF-8 {}'.format( filename) args = shlex.split(cmd) p = subprocess.Popen(args) p.wait() with open('result.tsv', 'w', encoding="utf-8") as fw: writer = csv.writer(fw, dialect=csv.excel_tab, lineterminator='\n') with open('kameiten_touroku_list.txt', mode='rt', encoding="utf-8") as fr: mode = 0 for line in fr: t = line.strip() # タイトル確認 if t.startswith("①固定店舗"): mode = 1 elif t.startswith("②EC・通信販売(楽天市場)"): mode = 2 elif t.startswith("③EC・通信販売(Yahoo!ショッピング)"): mode = 3 elif t.startswith("④EC・通信販売(その他ECサイト)"): mode = 4 # 行末に%のみ抽出 if t.endswith("%"): # 市区町村と事業所名を分離 文字オーバーの場合結合されてしまうため t = re.sub(r'^([\d,]{1,7}) (\S+?) (\S+?市\S+?区)(\S)', r'\1 \2 \3 \4', t) row = t.split() n = len(row) # 保存条件 if mode == save: # 固定店舗 if mode == 1: if n > 7: tmp = row[0:3] + [' '.join(row[3:-3]) ] + row[-3:] elif n < 7: continue else: tmp = row writer.writerow(tmp) # EC・通信販売 elif mode in [2, 3, 4]: if n > 3: tmp = [row[0]] + [' '.join(row[1:-1]) ] + [row[-1]] elif n < 3: continue else: tmp = row writer.writerow(tmp)
スプレッドシート
「ファイル」-「ダウンロード」-「タグ区切りの値」
TSVファイルでダウンロードできます