Heim > Backend-Entwicklung > PHP-Tutorial > Beispieleinführung für die PHP-Sammlungsklasse Snoopy

Beispieleinführung für die PHP-Sammlungsklasse Snoopy

小云云
Freigeben: 2023-03-21 07:48:02
Original
8450 Leute haben es durchsucht

Snoopy ist eine PHP-Klasse, die zur Nachahmung der Funktionen eines Webbrowsers verwendet wird. Sie kann die Aufgaben des Abrufens von Webinhalten und des Sendens von Formularen ausführen. Offizielle Website http://snoopy.sourceforge.net/

Einige Funktionen von Snoopy:

  • Den Inhalt der Webseite abrufen fetch()

  • Textinhalt der Webseite abrufen (HTML-Tags entfernen) fetchtext()

  • Links der Webseite abrufen, Formular fetchlinks() fetchform()

  • Proxy-Host unterstützen

  • Grundlegende Überprüfung von Benutzername/Passwort unterstützen

  • Unterstützt die Einstellung user_agent, referer(origin ) ), Cookies und Header-Inhalt (Header-Datei)

  • Unterstützt die Browserumleitung und kann die Umleitungstiefe steuern

  • Kann die Webseite einfügen Der Link wird zu einer hochwertigen URL erweitert (Standard)

  • Daten übermitteln und Rückgabewert erhalten

  • Tracking-HTML-Framework unterstützen

  • Unterstützt die Weitergabe von Cookies bei der Weiterleitung

Erfordert PHP4 oder höher. Da es sich um eine PHP-Klasse handelt, ist keine Erweiterung der Unterstützung erforderlich. Dies ist die beste Wahl, wenn der Server Curl nicht unterstützt.

Klassenmethode

1. fetch($uri)

Dies ist die Methode, mit der der Inhalt der Webseite abgerufen wird. Der $URI-Parameter ist die URL-Adresse der gecrawlten Webseite. Die abgerufenen Ergebnisse werden in $this->results gespeichert.

Wenn Sie einen Frame scrapen, verfolgt Snoopy jeden Frame, speichert ihn in einem Array und speichert ihn dann in $this->results.

  1. <?php  
    $url = "http://www.nowamagic.net/librarys/veda/";  
    include("./Snoopy.class.php");  
    $snoopy = new Snoopy;  
    $snoopy->fetch($url);        //获取所有内容
    echo $snoopy->results;       //显示结果
    ?>
    Nach dem Login kopieren

2. fetchtext($URI)

Diese Methode ähnelt fetch(), der einzige Unterschied besteht darin, dass diese Methode entfernt HTML-Tags und andere irrelevante Daten, es wird nur der Textinhalt der Webseite zurückgegeben.

  1. <?php  
    $url = "http://www.nowamagic.net/librarys/veda/";  
    include("./Snoopy.class.php");  
    $snoopy = new Snoopy;  
    $snoopy->fetchtext($url);        //获取文本内容
    echo $snoopy->results;       //显示结果
    ?>
    Nach dem Login kopieren

3. fetchform($URI)

Diese Methode ähnelt fetch(), der einzige Unterschied besteht darin, dass diese Methode entfernt HTML-Tags und andere irrelevante Daten und gibt nur den Formularinhalt (Formular) auf der Webseite zurück.

4. fetchlinks($URI)

Diese Methode ähnelt fetch(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt und nur die Links zurückgibt die Webseite (Link ). Standardmäßig werden relative Links automatisch vervollständigt und in vollständige URLs umgewandelt.

5. send($URI,$formvars)

Diese Methode sendet ein Bestätigungsformular an die durch $URL angegebene Linkadresse. $formvars ist ein Array, das Formularparameter speichert.

6.submittext($URI,$formvars)

Diese Methode ähnelt subscribe(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt und nur zurückgibt die Anmeldeinformationen. Textinhalte in Webseiten.

7. subscribelinks($URI)

Diese Methode ähnelt subscribe(). Der einzige Unterschied besteht darin, dass diese Methode HTML-Tags und andere irrelevante Daten entfernt und nur die Links zurückgibt die Webseite (Link ). Standardmäßig werden relative Links automatisch vervollständigt und in vollständige URLs umgewandelt.

Klassenattribute (Standardwerte stehen in Klammern)

  • $host Der verbundene Host

  • $port Der verbundene port

  • $proxy_host Der zu verwendende Proxy-Host, falls vorhanden

  • $proxy_port Der zu verwendende Proxy-Host-Port, falls vorhanden

  • $agent Benutzer-Agent-Verkleidung (Snoopy v0.1)

  • $referer-Quelleninformationen, falls vorhanden

  • $cookies Cookies, falls vorhanden

  • $rawheaders andere Header-Informationen, falls vorhanden

  • $maxredirs maximale Anzahl von Weiterleitungen, 0=nicht erlaubt( 5)

  • $offsiteok, ob Weiterleitungen außerhalb der Website zugelassen werden sollen oder nicht (true)

  • $expandlinks Gibt an, ob alle Links vollständig vervollständigt werden sollen Adressen (wahr)

  • $user-Authentifizierungs-Benutzername, falls vorhanden

  • $pass-Authentifizierungs-Benutzername, falls vorhanden

  • $accept HTTP-Akzeptanztyp (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)

  • $error Wo der Fehler war gemeldet, falls vorhanden

  • $response_code Der vom Server zurückgegebene Antwortcode

  • $headers Header-Informationen, die vom Server zurückgegeben wurden

  • $maxlength Die längste zurückgegebene Datenlänge

  • $read_timeout Zeitlimit für Lesevorgang (erfordert PHP 4 Beta 4+), auf 0 gesetzt, wenn kein Zeitlimit überschritten wird

  • $timed_out Wenn bei einem Lesevorgang eine Zeitüberschreitung auftritt, gibt dieses Attribut „true“ zurück (erfordert PHP 4 Beta 4+)

  • $maxframes Die maximal zulässige Anzahl von Frames verfolgt werden

  • $status Der Status der erfassten http

  • $temp_dir-Webseite Das temporäre Dateiverzeichnis (/tmp), das der Server verwenden kann Schreiben Sie in das cURL-Binärverzeichnis

  • $curl_path. Wenn keine cURL-Binärdatei vorhanden ist, setzen Sie es auf „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";
    Nach dem Login kopieren

Den angegebenen URL-Inhalt abrufen:

  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  //获取表单
    ?>
    Nach dem Login kopieren

Formular Senden:

  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;//提交后只返回 链接
    ?>
    Nach dem Login kopieren

Nachdem das Formular nun abgeschickt wurde, gibt es eine Menge Dinge, die Sie tun können. Als nächstes verschleiern wir die IP und den Browser:

  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;
    Nach dem Login kopieren
  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 //返回报错信息
    ?>
    Nach dem Login kopieren

比较完整的示例:

  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";  
    }
    Nach dem Login kopieren

用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>";          
        }      
    }  
    ?>
    Nach dem Login kopieren

相关推荐:

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

php数据抓取类Snoopy使用

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

Das obige ist der detaillierte Inhalt vonBeispieleinführung für die PHP-Sammlungsklasse Snoopy. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage