僕はpixivをスクレイピングしてイラストなどを集めているのですが、そのクローラのコアになるプログラムがJava製なのですね。しかも他人の開発したものなんですよ。動作することには動作するんですけど、たまに止まるし、オープンソースじゃないからカスタマイズしたくてもできない。これはいずれ自作しないと不味いなとは思っていたんです。
ちなみに現状動かしてるpixivクローラの記事はこちら。
お手軽Pixiv画像収集クローラの作り方 - 超メモ帳(Web式)
それと、画像ファイルを取得するだけではなくてRSS形式でログを吐かせて、その絵師さんをお気に入りするなどのコミュニケーションも取りたいなと考えたのです。
僕が自由に書ける言語はPHPだけだから、PHPでクローラを組もうかと考えているのです。個人ベースのプロジェクトで自然言語解析もしたかったから、ライブラリは探し続けていたのですね。そしたら見つけた。
なんかこれ凄いです。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を生成するのも昔と違って楽になっている。
PHPでRSSを簡単に生成できるライブラリを紹介! | tutty.info
小さな作業改善のプログラミングは楽しいですね。