Snoopyはphpクラスで、ブラウザの機能をシミュレートし、Webコンテンツを取得したりフォームを送信したりすることができます。 Snoopyを正しく動作させるには、サーバーのPHPバージョンが4以上であり、PCRE (Perl互換正規表現)、基本をサポートしている必要があります。 ランプ すべてのサービスがサポートされています。 snoopyクラスの公式ダウンロードアドレスは、http://snoopy.sourceforge.net/1ですWeb ページのコンテンツ fetch2. Web ページのテキスト コンテンツを取得します (RemoveHTMLtag) fetchtext3. ウェブからリンクを取得ページ、フォームfetchlinks fetchform4.プロキシホストをサポート5.基本的なユーザー名をサポート/パスワード検証6. サポート設定user_agent、リファラー (オリジン)、Cookie、ヘッダーコンテンツ(ヘッダーテキストピース)7.はブラウザーのリダイレクトをサポートし、リダイレクトの深さを制御できます 8 . Web ページ内のリンクを高品質のurl (デフォルト)に展開できます9.データを送信して戻り値を取得します10.の追跡をサポートHTMLframework11.は、リダイレクト時にcookiesを渡すことをサポートしています。これはphpクラスであるため、必要ありません。拡張サポートが必要、サーバーがcurlをサポートしていない場合に最適な選択です。 2.クラスメソッド:fetch($URI) これはWebページのコンテンツをクロールするために使用されるメソッドです。 $URI パラメータは、クロールされた Web ページの URL アドレスです。取得した結果は $this->results に保存されます。フレームをスクレイピングしている場合、Snoopyは各フレームを追跡して配列に保存し、それから$this->resultsに保存します。 fetchtext($URI)このメソッドはfetch()と似ていますが、唯一の違いは、このメソッドはHTMLタグとその他の無関係なデータを削除し、テキストのみを返すことです。 Web ページのコンテンツ。 fetchform($URI)このメソッドは fetch() と似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、フォームのみを返すことです。 Web ページのコンテンツ (フォーム)。 fetchlinks($URI)このメソッドはfetch()に似ていますが、唯一の違いは、このメソッドがHTMLタグとその他の無関係なデータを削除し、リンクのみを返すことです。ウェブページ (リンク) で。 デフォルトでは、相対リンクは自動的に補完され、完全な URL に変換されます。 submit($URI,$formvars) このメソッドは、$URLで指定されたリンクアドレスに確認フォームを送信します。 $formvarsはフォームパラメータを格納する配列です。 submittext($URI,$formvars)このメソッドはsubmit()と似ていますが、唯一の違いは、このメソッドはHTMLタグとその他の無関係なデータのみを削除することです。ログイン後に Web ページのテキスト コンテンツを返します。 submitlinks($URI)このメソッドはsubmit()に似ていますが、唯一の違いは、このメソッドがHTMLタグとその他の無関係なデータを削除し、リンクのみを返すことです。ウェブページ (リンク) で。 デフォルトでは、相対リンクは自動的に補完され、完全な URL に変換されます。3。ある場合 $proxy_port 使用されるプロキシ ホスト ポート (存在する場合) $agent Disguise (Snoopy v0.1)$referer ルーチン情報 (存在する場合) $cookies クッキー、ある場合 $rawheaders その他のヘッダー情報 、ある場合 $maxredirs リダイレクトの最大数、0=許可されない (5) $オフサイトOKかどうか(true)$expandlinks 完全なアドレスへのすべてのリンクを完了するかどうか (true)$user 認証されたユーザー名 、ある場合 $pass 認証ユーザー名、もしあれば$accept http Accept type (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 crawled httpステータス$temp_dir Webサーバーが保存できる一時ファイルのディレクトリwrite to (/tmp)$curl_path cURL binary , cURL binaryがない場合は、 falseの4つを設定します。 デモ コードをコピーinclude "Snoopy.class.php";$snoopy = 新しいスヌーピー;$snoopy->proxy_host = "www.phpoac.com" ;$snoopy->proxy_port = " 8080";$snoopy->agent = "(互換性; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";$snoopy->referer = "http://www.phpoac.com/ ";$snoopy->cookies["SessionID"] = 238472834723489l;$snoopy->cookies["favoriteColor"] = "RED";$ snoopy->rawheaders["Pragma"] = "キャッシュなし";$snoopy->maxredirs = 2;$snoopy->offsiteok = false;$snoopy->expandlinks = false;$snoopy->user = "ジョー";$snoopy->pass = "bloe";if($snoopy->fetchtext("http://www.phpoac.com")) {echo " ".htmlspecialchars($snoopy->results)."
n";
}
else //コレクションphpオープンソースネットワークset_time_limit(0);require_once("Snoopy.class.php");$ snoopy=new Snoopy(); //フォーラムにログイン$submit_url = "http://www.phpoac.com/bbs/logging.php?action=login";$submit_vars[ "loginmode"] = "通常";$ submit_vars["styleid"] = "1";$submit_vars["cookietime"] = "315360000";$submit_vars["loginfield"] = "ユーザー名" ;$submit_vars["username"] = " ***"; //あなたのユーザー名$submit_vars["password"] //あなたのパスワード$submit_vars ["questionid"] = "0 ";$submit_vars["answer"] = "";$submit_vars["loginsubmit"] = "送信";$snoopy->submit( $submit_url,$submit_vars); if ($snoopy->results){//接続アドレスを取得$snoopy->fetchlinks("http://www.phpoac.com /bbs");$ url=array();$url=$snoopy->results;//print_r($url);foreach ($url as $key=>$value ){//match http://www.phpoac.com/bbs/forumdisplay.php?fid=156&sid=VfcqTRアドレスはフォーラムセクションのアドレスですif(!preg_match("/ ^(http://www.phpoac.com/bbs/forumdisplay.php?fid=)[0-9]*&sid=[a-zA-Z]{6}/i",$value)){ unset($url[$key]); }}//print_r($url);//プレート配列を取得$url、ループアクセス、最初のモジュールの最初のページはこちら $i=0;foreach ($url as $key=>$value){if ($i>=1){// テスト制限break; }else{//このモジュールにアクセスし、投稿の接続アドレスを抽出する必要があります。正式にアクセスするには、投稿ページングデータを抽出してから、抽出する必要があります。ページングデータに基づく投稿データ$snoopy=new Snoopy(); $snoopy->fetchlinks($value);$tie=array();$tie[$i]= $snoopy->results;//print_r($tie); //配列foreach ($tie[$i] as $key=>$value)を変換{/ /matchhttp://www.phpoac.com/bbs/viewthread .php?tid=68127&extra=page%3D1&page=1&sid=iBLZfKif (!preg_match("/^(http://www. phpoac.com/bbs/viewthread.php?tid=)[0-9]* &extra=page%3D1&page=[0-9]*&sid=[a-zA-Z]{6}/i",$value) ){unset($tie[$i][$key]) ;}}//print_r($tie[$i]);//Category 配列、同じ投稿の異なるページのコンテンツを 1 つの配列にまとめます$left='' ;//左側のパブリック アドレスを接続します$j=0;$page=array();foreach ($tie[$i] as $key=>$value){$ left=substr($value,0,52);$m=0;foreach ($tie[$i] ] as $pkey=>$pvalue){//配列を再編成 if (substr($pvalue,0,52)==$left){$page[$j ][$m]=$pvalue;$m++;}}$ j++;}//重複の削除を開始します//$page=array_unique($page); 一次元配列にのみ使用できます$paget[0]=$page[0] ;$nums=count($page);for ($n=1;$n <$ nums;$n++){$paget[$n]=array_diff($page[$n ],$page[$n-1]);}//多次元配列からの重複値の削除終了//配列から空の値を削除unset($page);$page=array();// page配列を再定義します $page=array_filter($paget);//print_r($page);$u=0;$title=array();$content =array();$ temp='';$tt=array();foreach ($page as $key=>$value){//ペリフェラルループ、for a postif (is_array( $value)){foreach ($value as $k1=>$v1){//ページ内ループ、投稿の N ページ$snoopy= new Snoopy();$snoopy->fetch($v1);$temp=$snoopy->results;//タイトルを読むif ( !preg_match_all("/ < h2>(.*) /i",$temp,$tt)){echo "タイトルなし";exit;}else {$title [$u]=$tt[1][1];}unset($tt);//内容を読むif (!preg_match_all("/ < ;div id="postmessage_ [0-9]{1,8}" class="t_msgfont">(.*)
以上、snoopy の導入と使い方を側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。