2010-12-01 4 views
1

どのようにですか?Zend_Domをスクリーンスクレーパーとして使用する

ポイントにもっと...

は、この:

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 ')]" 
} 

そして私は私の人生のために何かをする方法を見つけ出すことはできません。

$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); 

は私にこれを提供しますこの。

検索されたデータのさまざまな部分を抽出したいのですが(それは、クラス "note"を持つdivで、その中の要素は...テキストとURLのようです)、何も動作しません。

誰かがphp.netのDOMElementクラスを指摘しましたが、上記のメソッドのいくつかを試してみると、うまく動作しません。どのように私はページからhtmlの塊をつかんで、さまざまな部分をつかむことができますか?私が戻ってくるこのオブジェクトを調べるには、どうすればそれが何であるかを少なくとも知ることができます。

Hjälp? Zend_Dom_Query_Result

答えて

4

Iterator実装は反復ごとに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 
} 

あなたがアクセスすることもできます:$要素変数から

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

を、あなたはどのDOMElementメソッドを使用することができますdocument elementを入力するか、Zend_Dom_Query_Resultを使用してください:

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

これは私が必要とした方向だった。今私は結果を上手く扱っています。説明と指針に感謝します。 – Lothar

関連する問題