Snoopy は、Web コンテンツの取得とフォームの送信というタスクを完了するブラウザーをシミュレートするために使用できる非常に強力な PHP クラスです。以下に、Snoopy.class.php の機能と一般的な使用法を詳しく紹介します。
公式サイト:http://snoopy.sourceforge.net/ (海外サイトが開けない場合はTianxingブラウザをご利用ください)
ダウンロードアドレス: http://sourceforge.net/projects/snoopy/
当サイトのダウンロードアドレス:PHPコレクションライブラリ Snoopy.class.php download
スヌーピーの特徴をいくつかご紹介します:
1. Web ページのコンテンツを取得します
2. Web ページのテキストコンテンツを取得します (HTML タグを削除します) fetchtext
3. Web ページのリンクを取得し、fetchlinks fetchform を作成します
4. プロキシホストをサポート
5. 基本的なユーザー名/パスワード検証をサポートします
6. user_agent、リファラー(ソース)、Cookie、ヘッダーコンテンツ(ヘッダーファイル)の設定をサポート
7. ブラウザーのリダイレクトをサポートし、リダイレクトの深さを制御できます
8. Web ページ内のリンクを高品質の URL に展開できます (デフォルト)
9. データを送信して戻り値を取得します
10. トラッキング HTML フレームワークのサポート (v0.92 で追加)
11. リダイレクト時の Cookie の受け渡しをサポートします
備考: Snoopy.class.php を使用するには PHP 4 以降が必要です。PHP クラスなので、サポートを拡張する必要はありません。サーバーがcurlをサポートしていない場合に最適です。
以下は、一般的に使用されるいくつかのクラスメソッドの紹介です:
フェッチ($URI)
これは、Web ページのコンテンツをクロールするために使用される方法です。 $URI パラメータはクロールされた Web ページの URL アドレスで、クロールされた結果は $this->results に保存されます。フレームをスクレイピングしている場合、スヌーピーは各フレームを追跡して配列に保存し、$this->results に保存します。
フェッチテキスト($URI)
このメソッドは fetch() に似ています。唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のテキスト コンテンツのみを返すことです。
フェッチフォーム($URI)
このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページのフォーム コンテンツ (フォーム) のみを返すことです。
フェッチリンク($URI)
このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。
送信($URI,$formvars)
このメソッドは、$URL で指定されたリンク アドレスに確認フォームを送信します。 $formvars はフォームパラメータを格納する配列です。
テキストを送信($URI,$formvars)
このメソッドは submit() に似ていますが、唯一の違いは、このメソッドは HTML タグやその他の無関係なデータを削除し、ログイン後に Web ページのテキスト コンテンツのみを返すことです。
リンクを送信($URI)
このメソッドは submit() に似ていますが、唯一の違いは、このメソッドが HTML タグやその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。
クラス属性: (デフォルト値は括弧内にあります)
$host 接続されているホスト
$port 接続するポート
$proxy_host 使用するプロキシ ホスト (存在する場合)
$proxy_port 使用するプロキシ ホスト ポート (存在する場合)
$agent ユーザーエージェント変装 (スヌーピー v0.1)
$referer ルーティング情報 (利用可能な場合)
$cookies クッキー (ある場合)
$rawheaders その他のヘッダー情報 (ある場合)
$maxredirs リダイレクトの最大数、0=許可されません (5)
$offsiteok オフサイトへのリダイレクトを許可するかどうか (true)
$expandlinks 完全なアドレスへのすべてのリンクを完了するかどうか (true)
$user 認証のユーザー名 (利用可能な場合)
$pass 認証ユーザー名 (利用可能な場合)
$accept http 受け入れタイプ (image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、*/*)
$error エラーがあればどこに報告されますか
$response_code サーバーから返された応答コード
$headers サーバーから返されたヘッダー
$maxlength 返されるデータの最長長
$read_timeout 読み取り操作のタイムアウト (PHP 4 Beta 4+ が必要) を 0 に設定すると、タイムアウトなしになります
$timed_out 読み取り操作がタイムアウトすると、このプロパティは true を返します (PHP 4 Beta 4+ が必要)
$maxframes 追跡できる最大フレーム数
$status キャプチャされた http
のステータス
$temp_dir Web サーバーが書き込むことができる一時ファイル ディレクトリ (/tmp)
$curl_path cURL バイナリ ディレクトリ。cURL バイナリがない場合は false に設定します
以下は一般的な使用例です:
(1) php プログラマーのメモ Web サイトのトップページのテキストをキャプチャします
リーリー(2) php プログラマーのメモ Web サイトのホームページのリンクをすべて取得します
リーリー(3) Renren にログインするために送信する必要があるフィールドとターゲットアドレスを取得します
リーリー(4) Renrenへのログインをシミュレートする
<?php set_time_limit(0); require "Snoopy.class.php"; $snoopy=new Snoopy(); $snoopy->referer='http://www.renren.com/'; $snoopy->agent="Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20100101 Firefox/22.0"; $submit_vars['email'] ='登陆账号'; $submit_vars['password'] ='登陆密码'; $url='http://www.renren.com/PLogin.do';//登陆数据提交的URL地址 $snoopy->submit($url,$submit_vars); $snoopy->fetch("http://www.renren.com/");//希望获取的页面数据 echo $snoopy->results;//www.phpernote.com