首頁  >  文章  >  後端開發  >  snoopy 簡介及使用

snoopy 簡介及使用

WBOY
WBOY原創
2016-08-08 09:24:271913瀏覽

Snoopy是一個php類,用來模擬瀏覽器的功能,可以取得網頁內容,發送表單。 Snoopy正確運行需要你的伺服器的PHP版本在4以上,並且支援基本的LAMP 服務都支援。 Snoopy類的官網下載網址為:http://snoopy.sourceforge.net/一、Snoopy網頁的一些特色一、Snoopy網頁的一些特色一、的內容 fetch2.抓取網頁的文字內容 (去除3 抓取網頁的鏈接,表單fetchlinks fetchform4.支援代理主機5. 支援設定user_agent, referer (來路), cookiesheader content(頭文) 8.能把網頁中的連結擴展成高品質的url(預設)9.追蹤HTML框架11.支持重定向的時候傳遞cookies,要求就不需要了擴充支援,伺服器不支援curl時候的最好選擇。 二、類別方法:fetch($URI)  這是為了抓取網頁的內容而使用的方法。 $URI參數是被抓取網頁的URL位址。抓取的結果儲存在 $this->results 中。如果你正在抓取的是一個框架,Snoopy將會將每個框架追蹤後存入陣列中,然後存入 $this->resultsfetchtext($URI)  本方法類似於fetch(),唯一不同的就是本方法會去除網頁中HTML,唯一不同的就是本方法會去除任何網頁中的文字HTML。 。 fetchform($URI)  本方法類似fetch(),唯一不同的就是本方法會去除網頁中HTML,唯一不同的就是本方法會移除這個內容HTML,唯一不同的就是本方法會移除一個內容HTML(form)fetchlinks($URI)  本方法類似於網頁fetch(),唯一不同的就是本方法會去除任何網頁HTML,唯一不同的就是本方法會去除HTML (link)預設情況下,相對連結將自動補全,轉換成完整的URLsubmit($URI,$formvars)  本方法向$URL指定的連結位址發送確認表單。 $formvars是一個儲存表單參數的陣列。 submittext($URI,$formvars)  本方法類似submit(),唯一不同的就是本方法會移除後登陸。網頁中的文字內容。 submitlinks($URI)  本方法類似於網頁submit(),唯一不同的就是本方法會去除HTMLML,唯一不同的是本方法會去除HTMLML (link)預設情況下,相對連結將自動補全,轉換成完整的URL三、類別屬性: (缺省值在括號中)$host 連接的主機$host 連接到的主機如果有的話$proxy_port 使用的代理主機端口,如果有的話$agent 偽裝 (Snoopy v0.1)偽裝 (Snoopy v0.1)偽裝 (Snoopy v0.1)偽裝  $cookies cookies, 如果有的話$cookies cookies, 如果有的話$rawheaders 其他的頭資訊 不允許  (5)$offsiteok whether or not to allow redirects off-site. (true)$expandlinks 是否將連結都補全認證位址使用者名稱如果有的話$pass 認證使用者名稱如果有的話 , image /jpeg, image/pjpeg, */*)$error 哪裡報錯如果有的話$response如果有的話$response頭資訊$maxlength 最長回傳資料長度$read_timeout 讀取作業逾時 (requires PHP4 B作業逾時 (requires PHP4 B作業逾時 (requires PHP4 B5 $timed_out 如果一次讀取操作逾時了,本屬性回傳 tru​​e (requires PHP 4 Beta 4+)$maxframes $狀態$temp_dir 網頁伺服器能夠寫入的臨時檔案目錄 (/tmp)$curl_path cURL binary 就設定為  false四、以下是demo複製程式碼include "Snoopy.class.php";$snoopy->proxy_port = "8080";$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL MSIE 4.01; MSN 2.5; http:/ /www.phpoac.com/";$snoopy->cookies["SessionID"] = 238472834723489l;$snoopy->cookies["favoriteColor"] Pragma"] = "no-cache";$snoopy->maxredirs = 2;$snoopy->offsiteok = false;$sloopy->offsiteok = false;$oopy->expandklinks->expoandusero> ";$snoopy->pass = "bloe";if($snoopy->fetchtext("http://www.phpoac.com")){ialecho " ($snoopy->results)." n"; 
}
else 
echo "error fetching document: ".$snoopy->error."n";snoopy採集? //採集php開源網set_time_limit(0);require_once("Snoopy.class.php");require_once("Snoopy.class.php");論壇$submit_url = "http://www.phpoac.com/bbs/logging.php?action=login";$submit_vars["loginmode"] = "normal"; "] = "1";$submit_vars["cookietime"] = "315360000";$submit_vars["loginfield"] = "username";$submit_vars["loginfield"] = "username";$submit_vars["loginfield"] = "username";$submit"; ; //你的使用者名稱$submit_vars["password"] = "*****"; //你的密碼$submit_vars["questionid"]"0 $submit_vars["answer"] = "";$submit_vars["loginsubmit"] = "提 交";$oopy-submit($sub snoopy->results){//獲取連接位址$snoopy->fetchlinks("http://www.phpoac.com/bbs");$url=array(); $url=$snoopy->results;//print_r($url);foreach ($url as $key=>$value){//匹配 phpoac.com/bbs/forumdisplay.php?fid=156&sid=VfcqTR位址即論壇板塊位址if(!preg_match("/^(http://www.phpoac.com/bbs/forumdisplay.php? =)[0-9]*&sid=[a-zA-Z]{6}/i",$value)){unset($url[$key]);}}/ /print_r($url);//獲取到板塊數組$url,循環訪問,此處獲取第一個模組第一頁的資料$i=0; $url as $key=>$value){if ($i>=1){//測試限制break; /訪問該模組,提取帖子的連接地址,正式訪問裡需要提取帖子分頁的數據,然後根據分頁數據提取帖子數據$snoopy=new Snoopy();$snoopy->fetchlinks($value );$tie=array();$tie[$i]=$snoopy->results;//print_r($tie);/tie轉換數組[$i] as $key=>$value){//匹配http://www.phpoac.com/bbs/viewthread.php?tid=68127&extra=page%3D1bbs/viewthread.php?tid=68127&extra=page%3D1&page 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(}}//print_r()_ $tie[$i]);//歸類數組,將同一個帖子不同頁面的內容放一個數組裡$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($p. left){$page[$j][$m]=$pvalue;$m++;}}$j++;}}$j++; //$page=array_unique($page);只能用於一維數組$paget[0]=$page[0];$nums=count($page);for ($n=1;$n {$paget[$n]=array_diff($page[$n],$page[$n-1]);}//去除多維數組重複值結束//去除數組空值unset($page);$page=array();///$page=array_filter($paget);//print_r($page);$u=0;$title=array();;$title=array();5; temp='';$tt=array();foreach ($page as $key=>$value){//if value)){foreach ($value as $k1=>$v1){//頁內循環,針對一個帖子的 ();$snoopy->fetch($v1);$temp=$snoopy->results;//讀標題if (!preg_match_all("/. ) /i",$temp,$tt)){echo "no title";exit;}el=$oexit;} tt[1][1];}unset($tt);//讀取內容if (!preg_match_all("/ (.*) /i",$temp,$tt)){print_r($tt);echo "no content1"; exit;}else{foreach ($tt[1] as $c=>$c2){contentcontent[$u].$content; }}else{//直接取頁內容$sn snoopy->results;//讀標題if (!preg_match_all("/ 

(.*) 

/i",$temp,$tt))🎟 echo "no title";exit;}else{$title[$u]=$tt[1][1];$title[$u]=$tt[1][1];$title[$u]=$tt[1][1];} //讀取內容if (!preg_match_all("/ 
(.*) 
/i",$temp, $tt))
{echo "no content2";exit;}else{for] $content[$u].=$c2;}}}$u++;}print_r($content);++ else{echo "login failed";exit;}?> 以上就介紹了snoopy 簡介及使用,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

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