目次
クラスメソッド
Demo
ホームページ バックエンド開発 PHPチュートリアル PHPコレクションクラススヌーピーのサンプル紹介

PHPコレクションクラススヌーピーのサンプル紹介

Mar 10, 2018 pm 01:11 PM
php snoopy 導入

Snoopy は、Web ブラウザーの機能を模倣するために使用される php クラスで、Web コンテンツの取得とフォームの送信のタスクを完了できます。公式ウェブサイト http://snoopy.sourceforge.net/

スヌーピーのいくつかの機能:

  • Web ページのコンテンツを取得する fetch()

  • Web ページのテキスト コンテンツをキャプチャする (HTML タグを削除する) fetchtext()

  • Web リンクのキャッチ、fetchlinks() のフォーム fetchform()

  • プロキシ ホストのサポート

  • 基本的なユーザー名/パスワード検証のサポート

  • user_agent、リファラー (ソース)、Cookie の設定のサポートヘッダーコンテンツ (ヘッダーファイル)

  • ブラウザのリダイレクトをサポートし、リダイレクトの深さを制御できます

  • Webページ内のリンクを高品質のURLに拡張できます(デフォルト)

  • データを送信して戻り値を取得します

  • トラッキングHTMLフレームワークをサポート

  • リダイレクト時のCookieの受け渡しをサポート

php4以降が必要です。 PHP クラスであるため、サポートを拡張する必要はありません。サーバーがcurlをサポートしていない場合に最適です。

クラスメソッド

1. fetch($uri)

これは、Webページのコンテンツを取得するために使用されるメソッドです。 $URI パラメータは、クロールされた Web ページの URL アドレスです。取得した結果は $this->results に保存されます。

フレームをスクレイピングしている場合、スヌーピーは各フレームを追跡して配列に保存し、$this->results に保存します。

  1. <?php  
    $url = "http://www.nowamagic.net/librarys/veda/";  
    include("./Snoopy.class.php");  
    $snoopy = new Snoopy;  
    $snoopy->fetch($url);        //获取所有内容
    echo $snoopy->results;       //显示结果
    ?>
    ログイン後にコピー

2. fetchtext($URI)

このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web 内のテキスト コンテンツのみを返すことです。ページ。

  1. <?php  
    $url = "http://www.nowamagic.net/librarys/veda/";  
    include("./Snoopy.class.php");  
    $snoopy = new Snoopy;  
    $snoopy->fetchtext($url);        //获取文本内容
    echo $snoopy->results;       //显示结果
    ?>
    ログイン後にコピー

3. fetchform($URI)

このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドは HTML タグとその他の無関係なデータを削除し、フォームのコンテンツ (form) のみを返すことです。ウェブページで。

4. fetchlinks($URI)

このメソッドは fetch() に似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。

5. submit($URI,$formvars)

このメソッドは、$URL で指定されたリンク アドレスに確認フォームを送信します。 $formvars はフォームパラメータを格納する配列です。

6. submittext($URI,$formvars)

このメソッドは submit() と似ていますが、唯一の違いは、このメソッドは HTML タグとその他の無関係なデータを削除し、その後 Web ページ内のテキスト コンテンツのみを返すことです。ログイン。

7. submitlinks($URI)

このメソッドは submit() と似ていますが、唯一の違いは、このメソッドが HTML タグとその他の無関係なデータを削除し、Web ページ内のリンクのみを返すことです。デフォルトでは、相対リンクは自動的に完成され、完全な URL に変換されます。

クラス属性 (デフォルト値は括弧内)

  • $host 接続するホスト

  • $port 接続するポート

  • $proxy_host 使用するプロキシホスト (存在する場合)

  • $ proxy_port 使用されるプロキシ ホスト ポート (存在する場合)

  • $agent ユーザー エージェント カモフラージュ (Snoopy v0.1)

  • $リファラー ソース情報 (存在する場合)

  • $cookies クッキー (存在する場合) If

  • $rawheaders 他のヘッダー情報 (存在する場合)

  • $maxredirs リダイレクトの最大数、0=許可されない (5)

  • $offsiteok オフサイトへのリダイレクトを許可するかどうか (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 Catch http ステータスを取得します

  • $temp_dir Web サーバーが書き込むことができる一時ファイル ディレクトリ (/tmp)

  • $curl_path cURL バイナリ ディレクトリ。cURL バイナリがない場合は false に設定します

Demo

  1. include "Snoopy.class.php";  
    $snoopy = new Snoopy;  
    $snoopy->proxy_host = "http://www.nowamagic.net/librarys/veda/";  
    $snoopy->proxy_port = "80";  
    $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";  
    $snoopy->referer = "http://www.4wei.cn";  
    $snoopy->cookies["SessionID"] = 238472834723489l;  
    $snoopy->cookies["favoriteColor"] = "RED";  
    $snoopy->rawheaders["Pragma"] = "no-cache";  
    $snoopy->maxredirs = 2;  
    $snoopy->offsiteok = false;  
    $snoopy->expandlinks = false;  
    $snoopy->user = "joe";  
    $snoopy->pass = "bloe";  
    if($snoopy->fetchtext("http://www.4wei.cn"))  
    {  
    echo "<PRE>".htmlspecialchars($snoopy->results)."
    n"; } else echo "error fetching document: ".$snoopy->error."n";
    ログイン後にコピー

指定された URL コンテンツ:

  1. <?  
    $url = "http://www.nowamagic.net/librarys/veda/";  
    include("snoopy.php");  
    $snoopy = new Snoopy;  
    $snoopy->fetch($url); //获取所有内容
    echo $snoopy->results; //显示结果
    //可选以下
    //$snoopy->fetchtext //获取文本内容(去掉html代码)
    //$snoopy->fetchlinks //获取链接
    //$snoopy->fetchform  //获取表单
    ?>
    ログイン後にコピー

フォームの送信:

  1. <?php  
    $formvars["username"] = "admin";  
    $formvars["pwd"] = "admin";  
    $action = "http://www.nowamagic.net/librarys/veda/";//表单提交地址  
    $snoopy->submit($action,$formvars);//$formvars为提交的数组
    echo $snoopy->results; //获取表单提交后的 返回的结果
    //可选以下
    $snoopy->submittext; //提交后只返回 去除html的 文本
    $snoopy->submitlinks;//提交后只返回 链接
    ?>
    ログイン後にコピー

フォームが送信されたので、さまざまなことができるようになります。次に、IP とブラウザを偽装しましょう:

  1. <?php  
    $formvars["username"] = "admin";  
    $formvars["pwd"] = "admin";  
    $action = "http://www.4wei.cn";  
    include "snoopy.php";  
    $snoopy = new Snoopy;  
    $snoopy->cookies["PHPSESSID"] = &#39;fc106b1918bd522cc863f36890e6fff7&#39;; //伪装sessionid
    $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器
    $snoopy->referer = http://www.4wei.cn; //伪装来源页地址 http_referer
    $snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息
    $snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.101"; //伪装ip
    $snoopy->submit($action,$formvars);  
    echo $snoopy->results;
    ログイン後にコピー
  2. ?>

原来我们可以伪装session 伪装浏览器 ,伪装ip, haha 可以做很多事情了。例如 带验证码,验证ip 投票, 可以不停的投。

ps:这里伪装ip ,其实是伪装http头,所以一般的通过 REMOTE_ADDR 获取的ip是伪装不了,反而那些通过http头来获取ip的(可以防止代理的那种) 就可以自己来制造ip。

关于如何验证码 ,简单说下:首先用普通的浏览器, 查看页面 , 找到验证码所对应的sessionid,同时记下sessionid和验证码值,接下来就用snoopy去伪造 。

原理:由于是同一个sessionid 所以取得的验证码和第一次输入的是一样的。

有时我们可能需要伪造更多的东西,snoopy完全为我们想到了:

  1. <?php  
    $snoopy->proxy_host = "http://www.nowamagic.net/librarys/veda/";  
    $snoopy->proxy_port = "8080"; //使用代理
    $snoopy->maxredirs = 2; //重定向次数
    $snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到
    // 例如链接为 /images/taoav.gif 可改为它的全链接 <a href="http://www.4wei.cn/images/taoav.gif">http://www.4wei.cn/images/taoav.gif</a>
    $snoopy->maxframes = 5 //允许的最大框架数
    //注意抓取框架的时候 $snoopy->results 返回的是一个数组
    $snoopy->error //返回报错信息
    ?>
    ログイン後にコピー

比较完整的示例:

  1. /**
    * You need the snoopy.class.php from 
    * http://snoopy.sourceforge.net/
    */
    include("snoopy.class.php");  
    $snoopy = new Snoopy;  
    // need an proxy?:
    //$snoopy->proxy_host = "my.proxy.host";
    //$snoopy->proxy_port = "8080";
    // set browser and referer:
    $snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";  
    $snoopy->referer = "http://www.jonasjohn.de/";  
    // set some cookies:
    $snoopy->cookies["SessionID"] = &#39;238472834723489&#39;;  
    $snoopy->cookies["favoriteColor"] = "blue";  
    // set an raw-header:
    $snoopy->rawheaders["Pragma"] = "no-cache";  
    // set some internal variables:
    $snoopy->maxredirs = 2;  
    $snoopy->offsiteok = false;  
    $snoopy->expandlinks = false;  
    // set username and password (optional)
    //$snoopy->user = "joe";
    //$snoopy->pass = "bloe";
    // fetch the text of the website www.google.com:
    if($snoopy->fetchtext("http://www.google.com")){   
        // other methods: fetch, fetchform, fetchlinks, submittext and submitlinks
        // response code:
        print "response code: ".$snoopy->response_code."<br/>n";  
        // print the headers:
        print "<b>Headers:</b><br/>";  
        while(list($key,$val) = each($snoopy->headers)){  
            print $key.": ".$val."<br/>n";  
        }  
        print "<br/>n";  
        // print the texts of the website:
        print htmlspecialchars($snoopy->results)."n";  
    }  
    else {  
        print "Snoopy: error while fetching document: ".$snoopy->error."n";  
    }
    ログイン後にコピー

用Snoopy类完成一个简单的图片采集:

  1. <meta http-equiv=&#39;content-type&#39; content=&#39;text/html;charset=utf-8&#39;>  
    <?php      
    include &#39;Snoopy.class.php&#39;;   //加载Snoopy类     
    $snoopy = new Snoopy();       //实例化一个对象
    $sourceURL = "http://www.nowamagic.net/librarys/veda/";    //要抓取的网页  
    $snoopy->fetchlinks($sourceURL);        //获得网页的链接
    $a = $snoopy->results;     //得到网页链接的结果
    $re = "/d+.html$/";     //匹配的正则
    //过滤获取指定的文件地址请求  
    foreach ($a as $tmp) {   
        if (preg_match($re, $tmp)) {  
            $aa=$tmp;          
        }      
    }    
    getImgURL($aa);  
    function getImgURL($siteName)   
    {          
        $snoopy = new Snoopy();          
        $snoopy->fetch($siteName);                  
        $fileContent = $snoopy->results;    //获取过滤后的页面的内容            
        //匹配图片的正则表达式        
        $reTag = "/<img[^s]+src="(http://[^"]+).(jpg|png|gif|jpeg)"[^/]*/>/i";                
        if (preg_match($reTag, $fileContent)) {    
            //过滤图片
            $ret = preg_match_all($reTag, $fileContent, $matchResult);                       
            for ($i = 0, $len = count($matchResult[1]); $i < $len; ++$i)   
            {        
                saveImgURL($matchResult[1][$i], $matchResult[2][$i]);              
            }          
        }      
    }          
    function saveImgURL($name, $suffix) {   
        $url = $name.".".$suffix;                  
        echo "请求的图片地址:".$url."<br/>";                  
        $imgSavePath = "E:/123/images/";  //图片保存地址      
        $imgId =mt_rand(); //产生一个随机的文件名
        if ($suffix == "gif") {   
            //根据图片类型,放入不同的文件夹下面           
            $imgSavePath .= "emotion";          
        }   
        else
        {              
            $imgSavePath .= "topic";          
        }          
        $imgSavePath .= ("/".$imgId.".".$suffix);  //组装要保存的文件名
        if (is_file($imgSavePath)) {     
            //判断文件名是否存在,存在则删除         
            unlink($imgSavePath);              
            echo "<p style=&#39;color:#f00;&#39;>文件".$imgSavePath."已存在,将被删除</p>";          
        }    
        $imgFile = file_get_contents($url); //读取网络文件     
        $flag = file_put_contents($imgSavePath,$imgFile);   //写入到本地 
        if ($flag) {              
            echo "<p>文件".$imgSavePath."保存成功</p>";          
        }      
    }  
    ?>
    ログイン後にコピー

相关推荐:

php使用snoopy与curl模拟登陆的实例分享

php数据抓取类Snoopy使用

snoopy(强大的PHP采集类) 详细介绍

以上がPHPコレクションクラススヌーピーのサンプル紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles