スクレイピングで使えそうなライブラリを見つけた。
僕はpixivをスクレイピングしてイラストなどを集めているのですが、そのクローラのコアになるプログラムがJava製なのですね。しかも他人の開発したものなんですよ。動作することには動作するんですけど、たまに止まるし、オープンソースじゃないからカスタマイズしたくてもできない。これはいずれ自作しないと不味いなとは思っていたんです。 ちなみに現状動かしてるpixivクローラの記事はこちら。

お手軽Pixiv画像収集クローラの作り方 - 超メモ帳(Web式)@復活僕はイラストも描くんですが資料の画像集めを自動化出来ないかと考えたわけですよ。毎日、Pixivを巡回してちまちまと画像を集めてたんですがとてもじゃないが時間が勿体無い。 ちなみに動作環境としてはwindows7でPHPが動作する環境を前提としてます。別にバッチファイルで作っても良かったんですが日付取得が面倒過ぎる。正確さを期すならばserverを用意してrsyncで取得する形でも良かったんですが、あくまでもお手軽ということでクライエントマシン一つで完結するようにしました。 PHPが動かないってひとはダウンロードしてきて用意して下さい。一つぐらいスクリプト言語入れてると何かと捗りますよ。 PHP…d.hatena.ne.jp
それと、画像ファイルを取得するだけではなくてRSS形式でログを吐かせて、その絵師さんをお気に入りするなどのコミュニケーションも取りたいなと考えたのです。
僕が自由に書ける言語はPHPだけだから、PHPでクローラを組もうかと考えているのです。個人ベースのプロジェクトで自然言語解析もしたかったから、ライブラリは探し続けていたのですね。そしたら見つけた。
Simple HTML DOM documentationA simple HTML DOM parser written in PHPsimplehtmldom.sourceforge.net
なんかこれ凄いです。jQueryに近い記述で簡単にDOM要素の内容を取得できます。サンプルを下に書きます。
<?php
// example of how to use basic selector to retrieve HTML contents
include('../simple_html_dom.php');
// get DOM from URL or file
$html = file_get_html('http://www.google.com/');
// find all link
foreach($html->find('a') as $e)
echo $e->href . '<br>';
// find all image
foreach($html->find('img') as $e)
echo $e->src . '<br>';
// find all image with full tag
foreach($html->find('img') as $e)
echo $e->outertext . '<br>';
// find all div tags with id=gbar
foreach($html->find('div#gbar') as $e)
echo $e->innertext . '<br>';
// find all span tags with class=gb1
foreach($html->find('span.gb1') as $e)
echo $e->outertext . '<br>';
// find all td tags with attribite align=center
foreach($html->find('td[align=center]') as $e)
echo $e->innertext . '<br>';
// extract text from table
echo $html->find('td[align="center"]', 1)->plaintext.'<br><hr>';
// extract text from HTML
echo $html->plaintext;
?>
やー、ここまで簡単にスクレイピングできるライブラリは見たことないですわ。生のPHPでクローラをごりごり書こうとしたことはあるんですけど、正規表現が面倒くさくてやめました。このライブラリは凄いですわ。面倒な処理が全部省力化されている。なにをしようか想像力がもりもり湧く。 ひとまずpixivのクローラを作ってみようと考えています。ログイン処理とかはWebAPIがあるかとかはまだ調べていないですけど、RSSを生成するのも昔と違って楽になっている。
tutty.info
小さな作業改善のプログラミングは楽しいですね。