[Java]Apache PDFBox 有能

Salesforceの認定資格ページをスクレイピングしたい

Salesforceは認定資格の企業別取得数一覧を公開していますが、
このWebページがいつの間にかHTMLからPDFに変更されたのはご存知でしょうか。

特に理由はないのですが、私はこの認定資格ページを定期的にスクレイピングして情報を取っていました。HTMLの頃はjsoupという良い感じのHTMLパーサーを使わせてもらっていたのですが、この度のPDF化により通用しなくなりました。

Apache PDFBoxでPDFからデータ抽出する

で、探したらApache PDFBoxというライブラリを見つけました。
# 先にApache Tikaという、様々なファイルフォーマットのデータ操作用ライブラリに行き当たり、その内部でPDFの操作にPDFBoxが使われているの知りました。

認定資格ページのPDFが単純な表組みということもあり、PDFBoxを使ってとても簡単にデータ抽出することができましたのでメモしておきます。

pom.xml

2015-03-20時点の最新バージョンは1.8.8

テキスト抽出するコードはこれだけ

これだけ。全テキスト抽出するだけなら超かんたん
PDDocument.loadはURLでもファイルでも入力ストリームでも受け付けてくれる

書いたコード

あとは行にバラして、日付と企業名/人数をバラして適当なオブジェクトに入れたりなどすれば良い。
せっかくなのでJava8で書きました。

認定資格ページからデータを抽出するためのサービスクラス

データの入れ物クラス

認定資格の定義enum

動作確認

こういうPDFが
CERT_DEV_2015-03-20

こう出る
コンソール_ 2015-03-20

# ところでJava8の新機能良いですね。java.util.Optional#orElseなど気に入りました。
# Stream#parallel()とかなんとなく使ってしまっているのでちゃんと勉強しないといけないですね。
# しかしStream api使ってるとforeachで副作用バリバリのコード書いた時のクソコード感が際立ちますね…。改善したいけれども…。


コメントを残す