スクレイピングツールを作成してみた
2026.01.27

ホームページから情報を拾おうとしたときに
使う技術がスクレイピングですが、
一般的なPythonあたりでやると、BeautifulSoupが定番。
しかし意外とかゆいところに手が届かないことが多くて悩むことが多い。
一番の問題が速度問題。
htmlソースのリード時間の殆どは通信速度に依存するため、
この部分はどうしようもないとしても、
解析に時間が掛かるのは納得がいかない。
Delphiのみでやってみると、望むとおりの結果はだせるが、
速度がやはり物足りない。
最適解はなんだと検討した結果、
スクレイピングエンジンはC言語で作って、
抽出結果を多言語で取り扱うように決めた。
作成は結構手間取ったが思い通りのものができたので大変満足。
実行ファイル名は、scrape.exe
スクレイピングしたいURLをurl.txtに書いておく。(現状は1アドレスのみ)
抽出したい箇所のXpathをXpath.Txtへ(何レコードでも可能)
抽出結果はout.txtにCSVで吐き出される。
各ファイル名を変更したい場合はコマンドラインに-fオプションを指定すれば可能。
第1引数がUrlファイル名、第2引数がXpathファイル名、第3引数が出力ファイル名になる。
例としては、
Scrape.exe -f a.txt b.txt c.txt
抽出したデータの空白を取り除きたいときは -t オプションをつけるといい。
scrape.exeを立ち上げる時にメモリのロードに時間がとられるが、
それが煩わしい場合は、事前に起動してメモリに常駐するモードも用意した。
-w で事前に立ち上げて置き、
プログラムからパイプで接続するだけでいい。とても快適だ(;´Д`)
ただし、エラーが出たら毎回警告がでるのでは完全自動化にすることができないので
-q オプションでエラー表示をしないというものも付けた。
Javascriptで表示されるページの情報が欲しい場合、
動作は遅いが、-jで取りに行けるようにもしてある。
常駐モードは処理が速い。快適、快適。望む通りの速度が出ている。
単体でテキストファイル(CSV)が吐き出される形にしたので、
Excelで直接開くことも可能だ。もちろんAccessのデータベースに貯めることもできる。
応用の幅は広い。
スクレイピングの対象であるホームページが改変されたとしても、
Xpath.txtの内容を書き換えるだけでいいので、
プログラムのコードは一切いじる必要がない。
このツールができたことで、スクレイピングのプログラムを作るたびに
毎回似たようなコードを書く必要もなくなった。
ここ最近でもっとも効率化がすすんだ部分だと思う。
2026.01.27 01:59
|





