インサイトラボ新潟Blog

DX化(データスクレイピング)のための手法のご紹介①

作成者: Ajih|2021年5月12日

初めまして。Ajihです。


社会人になってから今までずっとソフトウェア業界で仕事をしていましたが、データエンジニアではありませんでした。
インサイトラボに入社して初めてデータベースやデータビジュアライゼーション等のデータに関わる業務に携わっています。
また、地域の課題解決など私としては業務内容が新鮮で今の業務を楽しんでいます。
これから、少しでも新潟のDX化(デジタル化)に貢献出来ればと思っています。

今回の記事は、表形式のPDFデータをCSV(データベースに取り込める形)に変換する手法をご紹介したいと思います。
CSVとは、エクセルでも表示可能でデータベースに取り込むことが出来るデータ形式です。
※テキスト形式のPDF(エクセル、ワード等から作成したPDF)が対象です。

事前準備は以下です。

  • ghostscriptをインストール
  • python3をインストール
  • コマンドプロンプトを起動し、以下のコマンドでcamelotと付随するモジュールをインストール
pip install -r requirements.txt

requirements.txtの内容

camelot-py==0.8.2

cffi==1.14.3

chardet==3.0.4

click==7.1.2

cryptography==3.2.1

et-xmlfile==1.0.1

jdcal==1.4.1

numpy==1.19.4

opencv-python==4.4.0.46

openpyxl==3.0.5

pandas==1.1.4

pdfminer.six==20201018

pycparser==2.20

PyPDF2==1.26.0

python-dateutil==2.8.1

pytz==2020.4

six==1.15.0

sortedcontainers==2.3.0 

事前準備はこれで完了です。

次にテストデータで以下のデータを用意します。

  • テストデータ.pdf(エクセルから変換したPDF)

プログラムは、こちらです。

import camelot

# ページ分のオブジェクトが返却される
tables = camelot.read_pdf("テストデータ.pdf", pages='all')

# テーブルのリストになっているので、リストから1つのテーブルを取り出す
for table in tables:
  df = table.df
    df.to_csv('テストデータ.csv', encoding='cp932')

このPythonプログラムをコマンドプロンプトから実行することで、表内のデータをCSVに変換することが出来ました。

  • テストデータ.csv

この方法を応用することで、各小学校のホームページに公開されている給食データのPDFから越後データプラットフォームにデータを取得しています。