COCO'S朝食バイキング実施店舗一覧PDFファイルを取得してCSVにする


Change Log

(2020/10/13, 22:50)default-jdk不要です。削除しました。
(2020/9/24, 05:30)ソート前のsjis版画像を追加しました。
(2020/9/24, 05:30)sort & uniq処理のスクリプトを少し手直ししました。
(2020/9/25, 05:00)sort & uniq処理のスクリプトを少し手直ししました。

はじめに

COCO'S朝食バイキング実施店舗一覧のPDFファイルを取得してCSVにしてみます。

なお

  • 本記事ではRaspberryPi 4とPython3.7.3で実行しています。が、そこは大きな依存ポイントにはならず、たいていの環境で動くでしょう。
  • また、出力結果確認は楽なWindows上のExcelとテキストエディタで行っていますが、そこもよしなに。

準備 どこでもいいです

$ pwd
/home/dk4130523/scripts/cocos
$ mkdir -p pdf
$ mkdir -p csv
$ pip3 install tabula-py

スクリプト

pandas2x.py

import pandas as pd
import tabula

for p in range(1,5):
    dfs = tabula.read_pdf("./pdf/bvshoplist.pdf", lattice = True, pages = p)
    for df in dfs:
        df.to_csv("./csv/bvshoplist.sjis.csv", index = None, mode = 'a', encoding = 'shift_jis')
        df.to_csv("./csv/bvshoplist.utf8.csv", index = None, mode = 'a', encoding = 'utf-8')

getbreakfast.sh

#!/bin/bash
# download latest pdf file
wget -O ./pdf/bvshoplist.pdf https://www.cocos-jpn.co.jp/menu_pdf/bvshoplist.pdf

# convert to csv by pandas and tabula
rm -rf ./csv/bvshoplist.csv
python3 ./pandas2x.py

# sort and uniq if required
cat ./csv/bvshoplist.sjis.csv | sort -t. -k1,1n -k2,2n | uniq > ./csv/bvshoplist.u_s.sjis.csv
cat ./csv/bvshoplist.utf8.csv | sort -t. -k1,1n -k2,2n | uniq > ./csv/bvshoplist.u_s.utf8.csv

# copy to some nice location
cp ./csv/bvshoplist.unique.sorted.*.csv /home/pi/Public/cocos/

chmod +x

$ chmod +x ./getbreakfast.sh

実行 トータル20秒くらいです

$ ./getbreakfast.sh
--2020-09-23 17:32:10--  https://www.cocos-jpn.co.jp/menu_pdf/bvshoplist.pdf
Resolving www.cocos-jpn.co.jp (www.cocos-jpn.co.jp)... 52.197.112.230, 52.68.53.187
Connecting to www.cocos-jpn.co.jp (www.cocos-jpn.co.jp)|52.197.112.230|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 524703 (512K) [application/pdf]
Saving to: ‘./pdf/bvshoplist.pdf’

./pdf/bvshoplist.pdf
100%[================>] 512.41K  1.39MB/s    in 0.4s    

2020-09-23 17:32:10 (1.39 MB/s) - ‘./pdf/bvshoplist.pdf’ saved [524703/524703]
$

出力結果確認

保存先

(僕の用途では、ソート&ユニークにしたものだけあれば十分です。ソート&ユニークする前のものも、元の場所に残してあります。今回、ソート&ユニーク後のsjis版とutf8版で、どちらも同じ223行であることのみ確認しました。)

sjisソート前

sjisソート後 ラズパイで自動ソートしたものをExcelで開いただけの状態

utf8

おしまい

本記事の紹介はここまです。この先は用途に応じて適宜。よかったですね。😺💕

参考

大いに参考にさせていただきました。ありがとうございました。😺💕
【自動化】PDF内の表をPythonで抜き出す