- 10/28追記:「まとめ」UP
- 前説:東証株式日報(PDF版)をPythonで処理する準備。
- 現状:tabulaインストールはできたようだがエラーがいろいろ出ている。
- 今後:ひとまず「保留」「挫折」ということで他の道具を探してみます。
- 17日追記:東証株式相場表でもやってみましたがエラーがでました…。
10/28追記:「まとめ」UP
東証株式相場表をDLし、PDFMinerでCSV化。「LOAD DATA INFILE」でMySQLへUP、というながれをまとめました。
前説:東証株式日報(PDF版)をPythonで処理する準備。
tabula-pyで東証株式日報表の数字を処理しようと考え、前段階としてJavaをインストールしひとまずJavaが動いたみたいだ、というのを前記事で掲載しました。
pagetaka.hatenablog.jp
現状:tabulaインストールはできたようだがエラーがいろいろ出ている。
VSCodeにtabulaをインストールし、PDFを処理するのに役立つページを見つけました。設定項目もいくつか例示されていたので助かりました。
di-acc2.com
ということで、tabulaインストール方法とかは省略します。実際にVSCodeで動かしたPythonファイルは以下の通りです。
import pandas as pd from tabula import read_pdf import time # pdf_path = 'https://www.mhlw.go.jp/content/10906000/000618483.pdf' #ネット上PDF # pdf_path = 'C:\pyfiles\data\000618483.pdf' #パスエラーになるので↓のように変更 pdf_path = 'C:\\pyfiles\\data\\000618483.pdf' # テキストテーブル取得 dfs = read_pdf(pdf_path, # PDFファイル encoding = 'cp932', #文字コード pages='1', # 抽出ページ ※今回はallでも同結果 guess=False, # 分析部分の変更有無 ※今回はTrueでも同結果 area="entire", # ページの部分指定 lattice=True, # 格子区切りがPDF内にある場合の対応 stream=False, # ストリームモード password=None, # パスワード multiple_tables=True #複数テーブル(表) ) # https://di-acc2.com/system/rpa/8610/ #設定を参考にした頁 for df in dfs: time.sleep(1) #非力なPCなのでチョット一服…。 print(df) #表が一部崩れているが…。
実際に、いくつかネット上のPDFを処理しましたが、エラーがイロイロ出ます。PC上のPythonデータ用フォルダデスクトップ内のPDFもエラーが出ます。これが現在地点です。下は、encodingをコメントアウトしたときのエラーです。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8c in position 1: invalid start byte
今後:ひとまず「保留」「挫折」ということで他の道具を探してみます。
最初できていたことが翌日できなかったり、対象にするPDFにより結果が違ったり、安定しません。なので、tabula-pyを使うのを保留し、別の道具が無いか探してみたいと思います。
AdobeのAcrobatX Pro(すでにサポート終了ですけど)を使っています。他の形式のファイルへの書き出しができるのでそれを使ってExcelファイルにしてみたら、きれいにできていました。Excelになった後なら処理がしやすいよね~などと眺めているところです…自信はありませぬ。VBAをつかうことになるのか、はたまたPythonで何かやらかすのか…不明…爺の妄想はとん挫す…ということになる可能性が高そうです。
放置プレーになりそうです…。
17日追記:東証株式相場表でもやってみましたがエラーがでました…。
東証株式相場表の8月15日日報PDFでやってみましたがエラーになりました。
設定したパスは以下の通りです。
pdf_path = 'https://www.jpx.co.jp/markets/statistics-equities/daily/nlsgeu000006kpi1-att/stq_20220815.pdf'
エラーは次のように表示されました。
json.decoder.JSONDecodeError: Invalid \escape: line 1 column 4628 (char 4627)