PHPでWEBスクレイピングする最善策はなにか?策の決定から実戦まで解説

PHPでWEBスクレイピングする最善策を記しておきます。

※この記事のみどこというかポイントのようなものは以下のような事柄です。・・・対象読者はさだめていません。強いて書くならわたしと同じようなレベルな人が対象です。ここに書いてあることはすべて個人的な見解です。

  • PHPをあまりさわったことがない
  • PHPでWEBスクレイピングしたいけどやったことがない。
  • PHPでWEBスクレイピングをやってみようかなと思っている人
  • 他の言語でWEBスクレイピングやったことあるけどPHPではやったことがない

WEBスクレイピングとは、プログラムでネットの情報を収集することを言います。/関連記事としては以下のようなものがあります。

PHPでWEBスクレイピングする最善策を探す

PHPでWEBスクレイピングするならどの方法が一番よいのかをネットで検索してみました。

  • 正規表現でほしい部分を抽出 → ✕ 正規表現なんてつかいたくありません
  • phpQueryを使う → 〇 セレクター指定ができる。導入の価値あり。
  • PHP Simple HTML DOM Parserを使う → phpQueryとほぼ同じような感じ。ぱっとみだとphpQueryのほうが使いやすそう

OKです。だいたいのサイトでここにあげたものを紹介してあります。一番解説されてるのが多かったのはphpQueryでした。ということでこれを使います。phpQueryはライブラリのでまず公式サイトからダウンロードしてきます。こちらのライブラリはphpファイルになっているのでrequier_once(“”);で読み込む必要があります。

phpQueryの公式サイト、およびダウンロードリンクは以下になるようです。

phpQueryをダウンロードする

phpQueryのダウンロードサイトにいくといっぱいダウンロードリンクがありますが、基本的に一番上のやつを選べばよいです。わかる人は好きなのをえらべばいいと思います。
phpQuery download

次にダウンロードしたzipファイルの中身を確認します。入っていたのはphpQuery-onefile.phpというファイルひとつのみでした。※phpQueryを使うにはこのファイルを読みこむ必要がありますので、Eclipseだったらプロジェクトにこのファイルをほおりこみます。
phpQueryfile

PHPでスクレイピングする環境

PHPでスクレイピングしようとおもったはいいが、そもそも開発環境がないみたいなことにあるかもしれません。JavaScriptやPythonのように簡単にはできない?・・・おそらくEclipse が一番簡単に環境構築きるのではないでしょうか?※あくまで個人的な見解です。

とりあえず最初は小さくはじめるのが大事ですから、とりあえずということであればEclipseで十分です。

phpQueryでWEBスクレイピング実践

phpQuery-onefile.phpをEclipseのプロジェクトにほうりこんだら、適当なphpファイルを作成して、以下の構文を記述。※スクレイピングするサイトは当サイト「初心者のプログラミング」のURLを指定しました。

<?php
require_once(".\phpQuery-onefile.php");
$html = file_get_contents("http://xn--u9j207iixgbigp2p.xn--tckwe/");
echo phpQuery::newDocument($html)->find("h1")->text();
?>

画像ものせておきましょう。
phpQuery scrape

これで準備ができたのでEclipseのPHPWEBアプリケーション実行で実行してみます。するとなんと。普通にスクレイピングすることができました。
phpQuery test

非常に小さなプログラムでしたが、この要領さえわかれば、あとはやりたいことに応じてプログラムを大きくしていくだけです。

phpQuery雑感

phpQueryをつかったことでPHPWEBスクレイピングの扉をあけることができたのような気がします。PHPのスクレイピングに関する情報を検索してみましたが、古くからある技術なのかどうかわかりませんが、解説してあるサイトがたくさんありました。あとは必要におうじて調べていけばよさそうですね。


※技術書はいかがですか?

※サイト運用を検討してみませんか?

この記事の情報は以上になります。

おまけ

※Eclipseを使用しています。phpQueryには2種類のアクセス方法があります。Eclipseで違うファイルを画面分割で表示したい場合はタブをドラッグします。
phpQuery scrapetest