2016年12月7日水曜日

PHPのWebスクレイピング・ライブラリ「Goutte」と「phpQuery」を比較してみた。一部引用しました。

勉強の為に一部引用しました。
http://qiita.com/ka215/items/79c30e9c15ae0462f457

コーディングのし易さでも、phpQuery の方がコード量が少なくて済むので扱い易い印象があった。 Goutte では名前空間を利用しているので、グローバル空間側で定義した変数などを Client クラスに受け渡す場合や、 Client クラス内のメソッドへ変数を受け渡す時などに、リファレンス扱いで参照渡ししないとそれぞれの名前空間のスコープで変数が共存できなかったりしてちょいと面倒だな…と感じた次第。まぁ、この辺は好き嫌いの範疇だなぁ…。
特筆すべき点としては、スクレイピング元のURLからファイルを取得する処理の差だろうか。というのも、 Goutte では専用の request() メソッドがあって、そこではGET以外にPOSTメソッドタイプにてファイル取得ができる点が優れている。これによってSubmit後にしか表示できないようなURLにも対応できる可能性があるのだ。一方で、 phpQuery ではファイル取得はライブラリに依存しない形で別途コーディングしないといけない。例では file_get_contents() 関数で取得しているが、POSTメソッドを指定してアクセスしたい場合などは結構手間が増えるかもしれない。

というわけで、使用メモリを比較した結果は、圧倒的に phpQuery の勝ちですな。
Goutte でのスクレイピングは2MB程度のメモリを食うが、 phpQuery はその半分以下のメモリでサクサク動いているという感じ。

総評

なかなか甲乙付けがたい結果ではあるんだが、あえて判定するなら、スクレイピング・ライブラリとしては phpQueryが僅差で勝ちって感じかなぁ。あくまで私の主観での総評になるが、比較結果は下記のようになるかと。
  • 導入敷居の低さ: phpQuery > Goutte (依存系ライブラリがなく、素で対応するPHPバージョンが多い)
  • コーディング: phpQuery ≒ Goutte (コード量では phpQuery だが、機能面では Goutte の方がやや優秀か)
  • パフォーマンス(処理時間): phpQuery < Goutte (今回は総処理時間で Goutte に分があったが、コンテンツ捜査処理いかんでは逆転するリスクを含んでいる)
  • パフォーマンス(使用メモリ): phpQuery > Goutte (使用メモリ効率として97%の Goutte は無駄がなくて良いのだが、総メモリ使用量と各プロセスにおける割り当てメモリの分配の仕方は phpQuery の方が優秀だった)
どっちを使うかは好み次第だなぁ…。
ちなみに私は、jQuery好きなこともあるし、使用メモリ量が少なくて済む phpQuery を選ぼうかと。


0 コメント:

コメントを投稿