首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Snoopy:強大的 PHP 爬蟲類完整使用指南與範例

     編輯:PHP 綜合知識

什麼是 Snoopy?

Snoopy 是一個純 PHP 實作的 HTTP 客戶端類,無需安裝任何擴充套件(甚至不需要 cURL),支援 PHP 4 以上版本。它能模擬瀏覽器行為,是伺服器不支援 cURL 時的最佳替代方案。

核心功能特色

  • 抓取網頁內容(fetch)、純文字(fetchtext)、連結(fetchlinks)、表單(fetchform)
  • 支援 Proxy、Basic Auth、自訂 User-Agent、Referer、Cookie、Header
  • 支援重定向追蹤與深度控制、相對連結自動補全
  • 支援表單提交(submit、submittext、submitlinks)
  • 支援 HTML 框架追蹤、重定向時保持 Cookie

常用方法速查表

方法說明
fetch($url)抓取完整頁面內容,結果存 $this->results
fetchtext($url)抓取並移除 HTML 標籤,只回傳文字
fetchlinks($url)抓取所有連結,預設自動補全為絕對 URL
fetchform($url)抓取表單內容
submit($url, $formvars)POST 提交表單,$formvars 為欄位陣列
submittext($url, $formvars)提交並只回傳文字內容
submitlinks($url, $formvars)提交並只回傳連結

關鍵屬性設定

$snoopy = new Snoopy;
$snoopy->proxy_host = "https://proxy.example.com";
$snoopy->proxy_port = "8080";
$snoopy->agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1)";
$snoopy->referer = "https://www.example.com";
$snoopy->cookies["SessionID"] = "abc123";
$snoopy->rawheaders["X-Forwarded-For"] = "1.2.3.4"; // 偽造 IP(僅影響 HTTP Header)
$snoopy->maxredirs = 3;        // 最大重定向次數
$snoopy->expandlinks = true;   // 自動補全相對連結

實戰範例:偽裝瀏覽器登入並抓取內容

include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
$snoopy->referer = "https://target-site.com/login";
$snoopy->cookies["PHPSESSID"] = "known_session_id"; // 繞過驗證碼技巧:同 Session 共用驗證碼

$formvars = ["username" => "admin", "pwd" => "password"];
if ($snoopy->submit("https://target-site.com/login", $formvars)) {
    echo htmlspecialchars($snoopy->results);
} else {
    echo "Error: " . $snoopy->error;
}

進階應用:處理框架頁面

啟用 $snoopy->maxframes = 5 後,$snoopy->results 會回傳陣列,每個元素對應一個框架的內容。

注意事項

  • 偽造 X-Forwarded-For 只能欺騙靠 Header 取 IP 的程式,$_SERVER['REMOTE_ADDR'] 無法偽造
  • 驗證碼繞過原理:先用瀏覽器取得 Session ID 與驗證碼,再用 Snoopy 攜帶同 Session ID 請求,因 Session 相同故驗證碼一致
  • 大量採集請加入延遲、輪換 Proxy、遵守 robots.txt
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved