2009-10-29 34 views
8

我正在尋找一個PHP庫,允許我取消網頁並關注所有cookie並預先填寫缺省值的表單,這就是最讓我惱火的。PHP抓取庫 - phpQuery?

我厭倦了用xpath匹配每個輸入元素,如果有更好的東西存在,我會愛上它。我遇到過phpQuery,但手冊不是很清楚,我也找不到如何發出POST請求。

有人可以幫助我嗎?謝謝。

@Jonathan Fingland:

在由手動供browserGet提供()我們有例如:

require_once('phpQuery/phpQuery.php'); 

phpQuery::browserGet('http://google.com/', 'success1'); 

function success1($browser) 
{ 
    $browser->WebBrowser('success2') 
    ->find('input[name=q]')->val('search phrase') 
    ->parents('form') 
    ->submit(); 
} 

function success2($browser) 
{ 
    echo $browser; 
} 

我想其他字段被報廢和在GET請求中發送回,我想用phpQuery :: browserPost()方法做同樣的事情,但我不知道該怎麼做。我試圖抓取的表單有一個輸入令牌,如果phpQuery可以足夠聰明地刮掉令牌並讓我更改其他字段(在這種情況下,用戶名和密碼),通過POST提交所有內容,我會很喜歡。

PS:請放心,這是而不是將被用於發送垃圾郵件。

+2

+1沒有答案,但期待別人的評論 – Andrew 2009-10-29 15:47:40

+0

如果手冊不明確,那麼你可以嘗試閱讀源代碼 – 2009-10-29 15:54:28

+1

現在生活對垃圾郵件發送者來說非常困難。 – 2009-10-29 16:14:31

回答

2

參見http://code.google.com/p/phpquery/wiki/Ajax,特別是:

phpQuery::post($url, $data, $callback, $type)

# data Object, String限定數據參數爲是一個對象或一個字符串。 POST請求應該使用查詢字符串格式,如可能:

$data = "username=Jon&password=123456"; 
$url = "http://www.mysite.com/login.php"; 
phpQuery::post($url, $data, $callback, $type) 

爲phpQuery是一個jQuery端口的方法簽名是相同的(在文檔直接鏈接到jQuery的網站 - http://docs.jquery.com/Ajax/jQuery.post

編輯

兩件事情:

也有可能滿足你N A phpQuery::browserPost功能進步更好。

但是,也請注意,success2回調僅在submit() or click()方法上調用,因此您可以在此之前填寫所有表單字段。

例如

require_once('phpQuery/phpQuery.php'); 
phpQuery::browserGet('http://www.mysite.com/login.php', 'success1'); 
function success1($browser) { 
    $handle = $browser 
    ->WebBrowser('success2'); 
    $handle 
    ->find('input[name=username]') 
     ->val('Jon'); 
    $handle 
    ->find('input[name=password]') 
     ->val('123456'); 
     ->parents('form') 
     ->submit(); 
} 
function success2($browser) { 
    print $browser; 
} 

(請注意,這還沒有測試過,但應該工作)

+0

請檢查我的更新。 – 2009-10-29 16:12:11

0

我會使用一個專用庫來解析HTML文件和一個專用庫來處理HTTP請求。對兩者使用相同的庫似乎是一個壞主意,國際海事組織。

要處理HTTP請求,請查看例如。 HttpfulUnirest,RequestsGuzzle。古斯特尤其受歡迎,但最終,無論哪個圖書館最適合你,仍然是個人品味的問題。

對於解析HTML文件,我會推薦一個我自己寫的庫:DOM-Query。它允許您(1)加載HTML文件,然後(2)選擇或更改HTML的部分,就像您在前端應用程序中使用jQuery一樣。