2012-03-04 54 views
1

我試圖通過cURL從通過登錄頁面的網站獲取收入。我知道這是一個馬虎的方式,但我別無選擇。使用PHP cURL從網站獲取收入

<?php 
$username = "example"; 
$password = "example"; 
$postfields = "email=$username&password=$password"; 
// Use Curl to return the raw source of a webpage to a variable called 
$ch = curl_init(); 
//curl_setopt($ch, CURLOPT_HEADER, 1); // Get the header 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Allow redirection 
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie"); 
curl_setopt($ch, CURLOPT_URL, "https://www.domain.com/login"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields"); 

$page = curl_exec($ch); 
curl_close($ch); // Closing 

if (preg_match("/<th>(.*)<\/th/s", $page, $matches)) { 
    echo $matches[1]; 
} 
?> 

基本上我能闖過登錄罰款,當試圖使用的preg_match不搶任何東西它重定向我到特定的網站,我想抓住從收入的儀表盤,但是,它只是打印儀表板的所有HTML。

我想只得到 「$ 99.99」 的

<th>$99.99</th> 

幫助極大的讚賞之內。

回答

1

添加到您的代碼這一行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

..否則,捲曲剛剛打印出的會議的結果。我建議你的正則表達式不要貪婪:現在只有一個<th>,但是這部分代碼可能被複制粘貼到一些其他程序中 - 並且會導致麻煩。 )

+0

這樣做。謝謝! – Ziygo 2012-03-04 22:42:54

1

你的正則表達式是貪婪的,如果有多個的話,可能會抓取幾個<th>的內容。嘗試使用正則表達式解析HTML或XML通常不是一個好主意。 HTML解析器將更有效地完成此任務。我偏好DOMDocument

爲了解決手頭上的問題,[^<]+將收集所有字符,但不包括下一個<

if (preg_match("/<th>([^<]+)<\/th/s", $page, $matches)) { 
    echo $matches[1]; 
} 

使用preg_match_all()如果你有多個<th>檢索,如上述將只得到第一個。

+0

幸運的是,在它重定向到的頁面內只有一個。然而,在嘗試你的代碼後,它似乎仍然只是打印整個頁面的HTML代碼,而不僅僅是價格。重定向是否影響了這一點? – Ziygo 2012-03-04 22:29:46

+0

@Ziygo發佈包含''的HTML。如果您獲得了正確的標記,但沒有正確解析,則重定向不應該負責。 – 2012-03-04 22:32:04

+0

這只是返回

​​
$ 11.13
以及頁眉/頁腳。我正在使用的PHP代碼返回整個頁面。 – Ziygo 2012-03-04 22:36:21