2010-12-01 68 views
1

如何?使用Zend_Dom作爲屏幕刮板

更重要的一點...

這樣的:

$url = 'http://php.net/manual/en/class.domelement.php'; 
$client = new Zend_Http_Client($url); 
$response = $client->request(); 
$html = $response->getBody(); 
$dom = new Zend_Dom_Query($html); 
$result = $dom->query('div.note'); 
Zend_Debug::dump($result); 

給了我這樣的:

object(Zend_Dom_Query_Result)#867 (7) { 
    ["_count":protected] => NULL 
    ["_cssQuery":protected] => string(8) "div.note" 
    ["_document":protected] => object(DOMDocument)#79 (0) { 
    } 
    ["_nodeList":protected] => object(DOMNodeList)#864 (0) { 
    } 
    ["_position":protected] => int(0) 
    ["_xpath":protected] => NULL 
    ["_xpathQuery":protected] => string(33) "//div[contains(@class, ' note ')]" 
} 

而且我不能爲我的生活弄清楚如何使用做任何事這個。

我想提取檢索到的數據的各個部分(即與類「筆記」和其中的任何元素的div ...像文本和網址),但不能得到任何工作。

有人指出我在php.net上的DOMElement類,但是當我嘗試使用一些提到的方法時,我無法讓事情奏效。我如何從一個頁面抓取一大塊html並通過抓取各個部分?我如何檢查這個東西我回來了,所以我至少可以弄清楚它裏面有什麼?

Hjälp?

回答

4

Iterator實施Zend_Dom_Query_Result返回每個迭代DOMElement對象:

foreach ($result as $element) { 
    var_dump($element instanceof DOMElement); // always true 
} 

$元素變量,你可以使用任何DOMElement方法:

foreach ($result as $element) { 
    echo 'Element Id: '.$element->getAttribute('id').PHP_EOL; 
    if ($element->hasChildNodes()) { 
     echo 'Element has child nodes'.PHP_EOL; 
    } 
    $aNodes = $element->getElementsByTagName('a'); 
    // etc 
} 

您還可以訪問document element,或者您可以使用Zend_Dom_Query_Result這樣做:

$document1 = $element->ownerDocument; 
$document2 = $result->getDocument(); 
var_dump($document1 === $document2); // true 
echo $document1->saveHTML(); 
+0

這是我需要的方向。現在我正在處理結果很好。非常感謝解釋和指示。 – Lothar 2010-12-01 04:56:30