2013-03-26 54 views
7

問題
無法完全理解Goutte web刮板。如何使用Goutte

請求
是否有人可以幫助我瞭解或提供代碼,以幫助我更好地瞭解如何使用GOUTTE網頁刷屏?我已經閱讀了README.md。我要尋找比,可提供諸如哪些選項GOUTTE可用,以及如何編寫這些選項或當你正在尋找的形式,你搜索的名稱=或ID =形式的更多信息?

頁面佈局試圖刮掉
步驟1
該網頁有一個窗體有一個單選按鈕來選擇填寫什麼樣的形式進行(即名稱或許可證)。默認情況下,名稱和姓氏文本框以及狀態下拉菜單選擇列表。如果您選擇收音機存在的jQuery或JavaScript,使名字和姓氏文本框消失,並出現一個文本框許可證。

步驟2
一旦您已成功提交表單,然後它帶給你具有多個鏈接的頁面。我們可以進入其中的兩個來獲取我們需要的信息。

步驟3
一旦我們成功地點擊我們要在第三頁的鏈接具有我們正在尋找的數據,我們希望將這些數據存儲到一個PHP變量。

提交錯誤信息
如果錯誤信息,然後提交一個jQuery/JavaScript的返回 消息「沒有記錄被發現了。」在提交的同一頁面上。


優選的方法將是選擇許可證單選按鈕,在許可證號碼填寫,選擇狀態,然後提交表格。我已閱讀噸的帖子和博客有關GOUTTE等物品無處我能找到什麼選項可用於GOUTTE,你是怎麼找到這方面的信息或如何使用這些信息,如果它確實存在。

+0

也許這個問題需要更具體?目前這是非常普遍的,很難回答。如果問題在於JavaScript不在Goutte中運行,那麼這將是正確的 - 您需要爲此運行適當的瀏覽器。無頭Webkit會爲你做到這一點。 – halfer

回答

13

您要查看的文檔是Symfony2 DomCrawler

GOUTTE是對Guzzle頂部客戶構建返回爬行您每次請求/提交什麼時間:

use Goutte\Client; 
$client = new Client(); 
$crawler = $client->request('GET', 'http://www.symfony-project.org/'); 

與此爬網,你可以做的東西一樣獲得身體內部所有P標籤:

$nodeValues = $crawler->filter('body > p')->each(function (Crawler $node, $i) { 
    return $node->text(); 
}); 
print_r($nodeValues); 

填寫並提交形式:

$form = $crawler->selectButton('sign in')->form(); 
$crawler = $client->submit($form, array(
     'username' => 'username', 
     'password' => 'xxxxxx' 
)); 

Crawler上的selectButton()方法返回 與給定文本匹配的按鈕(輸入[type = submit], input [type = image]或按鈕)的另一個Crawler。 [1]

您點擊鏈接或設置選項,選中複選框等,請參閱Form and Link support

爲了充分利用履帶數據使用htmltext方法

echo $crawler->html(); 
echo $crawler->text(); 
0

多的試驗和錯誤之後,我發現,有一個更容易的,有據可查,更好assitance(如果需要),並更有效的刮刀比GOUTTE。如果您有GOUTTE問題,請嘗試以下操作:

  1. 簡單的HTML DOM:http://simplehtmldom.sourceforge.net/

如果你在同樣的情況,因爲我是在那裏你試圖刮掉頁面需要從引用自己的網站,那麼你可以使用捲曲和簡單的HTML DOM的組合,因爲它不會出現簡單的HTML DOM必須發送一個引用的能力。如果你不需要引用者,那麼你可以使用簡單的HTML DOM來刮頁面。

$url="http://www.example.com/sub-page-needs-referer/"; 
$referer="http://www.example.com/"; 
$html=new simple_html_dom(); // Create a new object for SIMPLE HTML DOM 
/** cURL Initialization **/ 
$ch = curl_init($url); 

/** Set the cURL options **/ 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_REFERER,$referer); 
$output = curl_exec($ch); 

if($output === FALSE) { 
    echo "cURL Error: ".curl_error($ch); // do something here if we couldn't scrape the page 
} 
else { 
    $info = curl_getinfo($ch); 
    echo "Took ".$info['total_time']." seconds for url: ".$info['url']; 
    $html->load($output); // Transfer CURL to SIMPLE HTML DOM 
} 

/** Free up cURL **/ 
curl_close($ch); 

// Do something with SIMPLE HTML DOM. It is well documented and very easy to use. They have a lot of examples. 
+2

Goutte試圖做一些比這個更公平的事情,我可以說:單擊鏈接,重定向,提交表單等 - 實質上是模擬瀏覽器。 – halfer

+0

謝謝。這不是Goutte被質疑的能力。缺乏如何正確使用它的文檔。我嘗試過並嘗試使用它,但無法弄清楚。簡單的HTML DOM很簡單。失敗後失敗並尋求從未出現過Goutte的幫助,我甚至不需要在簡單的HTML DOM上尋求幫助,只需要閱讀一小部分文檔即可找出答案。 – scrfix

+0

我只做了一點Goette,所以很難說我的文檔在這一點上是否有用。您是否使用自動完成IDE,出於興趣?如果沒有,它會讓你的生活變得更容易 - 如果不是Netbeans,我預計它會變得更加困難。 – halfer