Snoopy無疑是我使用過的最強大的採集類,本博也作過一些簡單的入門介紹。php
近日,我完成了數個基於Snoopy的程序,如批量下載百度文檔附件、論壇附件下載、本地文件批量上傳,已經能比較熟練的使用此類。加上本博主要是作採集程序研究的,那麼,有必要將Snoopy的一些高級功能拿出來曬曬,照顧下新人。那今天要演示的一個功能是,Snoopy模擬用戶登錄論壇並下載附件,並上傳到網盤的一個實例。數組
經過本例,咱們要取得附件上傳到網盤之後,返回附件在網盤的下載連接。這個功能,能夠和火車採集器無縫結合,實現火車採集器文章、Snoopy下載附件並按自定義目錄保存、附件同步上傳的效果。瀏覽器
首先講一下模擬用戶登錄須要使用到的幾個重要數據。cookie
模擬一個瀏覽器,如Firefox 3.5,即User-agent;工具
登錄論壇的Cookie值;oop
一個referer,即來源頁地址;fetch
這些數據能夠經過抓包工具獲取,如何使用抓包工具,請看一下這裏:http://www.4wei.cn/?p=1000446。網站
須要注意的是,這裏的User-agent和Cookie要同步,即同時經過抓包工具獲取的;這裏的referer也很重要,通常的防盜鏈措施均是經過referer來判斷的。但若是對方網站不是很變態,通常只須要一個對方的網站域名就夠了。ui
下面開始今天的代碼。spa
require_once 'Snoopy.class.php'; $snoopy = new Snoopy(); $snoopy->referer = 'http://www.4wei.cn'; $snoopy->strcookies = $COOKIE; $snoopy->agent = $agent; $snoopy->fetch($URI);
以上的代碼創建了一個基本的採集過程,若是你的cookie和user-agent填寫正確的話,那麼基本上能夠肯定,你已經成功登錄論壇了,你能夠經過如下方式查看到採集到的數據。
echo $snoopy->results; //或者 print_r($snoopy);
忽然以爲此文必火,那在這裏插入一段版權連接,轉摘着勿刪。歡迎你們收看使用Snoopy下載論壇附件,並上傳到網盤的實例。下面繼續將咱們獲取的數據。
若是咱們剛纔成功採集了一條附件下載連接,那麼咱們能夠在返回的數據中找到附件的名稱。
//讀取轉向的附件地址 echo $snoopy->lastredirectaddr; //或者從頭文件中讀取中文件名稱 print_r(join("\n", $snoopy->headers));
發現附件之後,咱們把文件保存起來,這個過程比較簡單,一句話代過。
//將內容保存爲一個本地文件 $savefile = SaveFile(basename($snoopy->lastredirectaddr), $snoopy->results);
這裏就算已經完成了附件的下載操做。接下來作文件上傳的演示,代碼註釋十分清楚。
//從新初始化 $snoopy = new Snoopy(); //設置模擬提交的類型爲 'multipart/form-data',知道爲何不。 $snoopy->set_submit_multipart(); //或者手工指定發佈類型 //$snoopy->_submit_method = 'multipart/form-data'; //要提交的程序路徑,即Form的action地址,決對路徑 $URI = 'http://www.rmdown.com/upload.php'; //模擬提交時的一些參數,多個參數能夠用數據保存 $formvars['upload'] = 'php'; //將要上傳的文件加入隊列中,多個文件可使用數組保存,這裏的file是文件上傳表單的name $formfiles['file'] = './uploads/xxoo.rar'; //執行模擬提交 $snoopy->submit($URI, $formvars, $formfiles);
若是成功上傳附件,則會返回一個帶參數的下載地址,那咱們經過正則匹配出新的網盤下載地址便可。