首頁  >  文章  >  後端開發  >  snoopy(強大的PHP採集類別) 詳細介紹

snoopy(強大的PHP採集類別) 詳細介紹

WBOY
WBOY原創
2016-08-08 09:32:161700瀏覽
Snoopy是一個php類,用來模擬瀏覽器的功能,可以獲取網頁內容,發送表單,可以用來開發一些採集程序和小偷程序,本文章詳細介紹snoopy的使用教程。 Snoopy的一些特色:
  • 抓取網頁的內容 fetch

  • 抓取網頁的文字內容 (去除HTMLcom f

    支援代理主機
  • 支援基本的使用者名稱/密碼驗證
  • 支援設定 user_agent, referer(來路), cookies 與 header content(頭文件)
  • 重定向深度
  • 能把網頁中的連結擴充成高品質的url(預設)
  • 提交資料並且取得回傳值
  • 支援追蹤HTMLML
  • cookies

  • 要求php4以上就可以了 由於本身是php一個類別 無需擴充支援 伺服器不支援curl時候的最好選擇,

  • $URI)
  • 這是為了抓取網頁的內容而使用的方法。

    $URI參數是被抓取網頁的URL位址。
  • 抓取的結果儲存在 $this->results 中。 如果你正在抓取的是一個框架,Snoopy會將每個框架追蹤後存入數組中,然後存入 $this->results。
    fetchtext($URI)本方法類似於fetch(),唯一不同的就是本方法會去除HTML標籤和其他的無關數據,只返回網頁中的文字內容。
    fetchform($URI)本方法類似於fetch(),唯一不同的就是本方法會移除HTML標籤和其他的無關數據,只返回網頁中表單內容(form)。 fetchlinks($URI)本方法類似於fetch(),唯一不同的就是本方法會移除HTML標籤和其他的無關數據,只返回網頁中連結(link)。
    預設情況下,相對連結將自動補全,轉換成完整的URL。 submit($URI,$formvars)
    本方法向$URL指定的連結位址發送確認表單。 $formvars是一個儲存表單參數的陣列。 submittext($URI,$formvars)
    本方法類似於submit(),唯一不同的就是本方法會去除HTML標籤和其他的無關數據,只返回登陸後網頁中的文字內容。 submitlinks($URI)本方法類似submit(),唯一不同的就是本方法會移除HTML標籤和其他的無關數據,只返回網頁中連結(link)。 預設情況下,相對連結將自動補全,轉換成完整的URL。 Snoopy採集類別屬性: (預設值在括號裡)
    $host 連接的主機port $host 連接的主機$port $proxy_port 使用的代理主機端口,如果有的話$agent 用戶代理偽裝 (Snoopy v0.1)$referer 來路信息,如果有的話$cookies cookies, rawheaders 其他的頭目資訊, 如果有的話$maxredirs 最大重定向次數, 0=不允許 (5)$offsiteok whether or not to allow red都補全為完整地址 (true)$user 認證用戶名, 如果有的話$pass 認證用戶名, 如果有的話$accept http 接受類型, (image/gif, , image/jpeg, image/pjpeg, */*)$error 哪裡報錯, 如果有的話$response_code 從伺服器傳回的回應碼$headers $response_code 從伺服器傳回的長頭回傳資料長度$read_timeout 讀取作業逾時 (requires PHP 4 Beta 4+) 設定為0為沒有逾時$timed_out 如果一次讀取超時了,本屬性傳回)$maxframes 允許追蹤的框架最大數量$status 抓取的http的狀態$temp_dir 網頁伺服器能夠寫入的臨時檔案目錄 (/tmp)$curl_path cURL binary就設定為 false下面是一個範例:
    include "Snoopy.class.php";
     $snoopy = new Snoopy;
      
     $snoopy->proxy_host = "http://www.9it.me";
     $snoopy->proxy_port = "80";
      
     $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
     $snoopy->referer = "http://www.9it.me";
      
     $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.9it.me"))
     {
     echo "<PRE>".htmlspecialchars($snoopy->results)."
    \n"; } else echo "error fetching document: ".$snoopy->error."\n";取得指定url內容
    <?php
     $url = "http://www.9it.me";
     include("snoopy.php");
     $snoopy = new Snoopy;
     $snoopy->fetch($url); //获取所有内容
     echo $snoopy->results; //显示结果
     //可选以下
     $snoopy->fetchtext //获取文本内容(去掉html代码)
     $snoopy->fetchlinks //获取链接
     $snoopy->fetchform  //获取表单
     ?>
    表单提交
    <?php
    $formvars["username"] = "admin";
    $formvars["pwd"] = "admin";
    $action = "http://www.9it.me";//</a>表单提交地址
    $snoopy->submit($action,$formvars);//$formvars为提交的数组
    echo $snoopy->results; //获取表单提交后的 返回的结果
    //可选以下
    $snoopy->submittext; //提交后只返回 去除html的 文本
    $snoopy->submitlinks;//提交后只返回 链接
    ?>
    既然已经提交的表单 那就可以做很多事情 接下来我们来伪装ip,伪装浏览器

    伪装浏览器
    <?php
    $formvars["username"] = "lanfengye";
    $formvars["pwd"] = "lanfengye";
    $action = "http://www.9it.me";
    include "snoopy.php";
    $snoopy = new Snoopy;
    $snoopy->cookies["PHPSESSID"] = 'fc106b1918bd522cc863f36890e6fff7'; //伪装sessionid
    $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器
    $snoopy->referer = "http://www.9it.me"; //伪装来源页地址 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;
    ?>
    原来我们可以伪装session 伪装浏览器 ,伪装ip, haha 可以做很多事情了。例如 带验证码,验证ip 投票, 可以不停的投。ps:这里伪装ip ,其实是伪装http头, 所以一般的通过 REMOTE_ADDR 获取的ip是伪装不了,反而那些通过http头来获取ip的(可以防止代理的那种) 就可以自己来制造ip。关于如何验证码 ,简单说下:首先用普通的浏览器, 查看页面 , 找到验证码所对应的sessionid,同时记下sessionid和验证码值,接下来就用snoopy去伪造 。原理:由于是同一个sessionid 所以取得的验证码和第一次输入的是一样的。
    有时我们可能需要伪造更多的东西,snoopy完全为我们想到了
    <?php
    $snoopy->proxy_host = "http://www.9it.me";
    $snoopy->proxy_port = "8080"; //使用代理
    $snoopy->maxredirs = 2; //重定向次数
    $snoopy->expandlinks = true; //是否补全链接 在采集的时候经常用到
    // 例如链接为 /images/taoav.gif 可改为它的全链接 <a href="http://www.9it.me/images/taoav.gif">http://www.9it.me/images/taoav.gif</a>
    $snoopy->maxframes = 5 //允许的最大框架数
    //注意抓取框架的时候 $snoopy->results 返回的是一个数组
    $snoopy->error //返回报错信息
    ?>

    以上就介绍了snoopy(强大的PHP采集类) 详细介绍,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    陳述:
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn