私はZend_Domを非常に軽いスクリーンスクレイピング(私は見出し、いくつかの本文テキスト、そして私のウェブサイト上の小さなニュースブロックからのリンクをつかみたい)に使用しようとしています。それが私に与えるDOMElement。 Zend_Domコードの手動でZend_DomはDOMElementを提供しています...どうすれば使用できますか?
は言う:
foreach ($results as $result) {
// $result is a DOMElement
}
どのように私はこのDOMElementのを利用するのですか?
詳細な例(Googleでアンカー要素を探して):
$url='http://google.com/';
$client = new Zend_Http_Client($url);
$response = $client->request();
$html = $response->getBody();
$dom = new Zend_Dom_Query($html);
$results = $dom->query('a');
foreach($results as $r){
Zend_Debug::dump($r);
}
これは私に与える:
object(DOMElement)#81 (0) {
}
object(DOMElement)#82 (0) {
}
object(DOMElement)#83 (0) {
}
... etc, etc...
を私は混乱を見つけるどのような各要素は何も(0を含まないように、これが見えることです)!これは事実ではありませんが、それが私の第一印象です。だから私は、オンラインでつつくと、私はこのうち何かを得るためにnodeValue
を追加できます:
Zend_Debug::dump($r->nodeValue);
私を与える:
string(6) "Images"
string(6) "Videos"
string(4) "Maps"
...etc, etc...
をしかし、私はトラブルに実行します。ここでは、特定の要素とその内容を取得しています。
<div class="newsBlurb">
<span class="newsDate">Mon, 11 October 2010</span>
<h3 class="newsHeadline"><a href="http://foo.com/1/2/">Some text</a></h3>
<a class="newsMore" href="http://foo.com/1/2/">More</a>
</div>
<div class="hr"></div>
<div class="newsBlurb">
<span class="newsDate">Mon, 16 August 2010</span>
<h3 class="newsHeadline"><a href="http://bar.com/pants.html">Stuff is here</a></h3>
<a class="newsMore" href="http://bar.com/pants.html">More</a>
</div>
私は、Googleの例で使用技術を使用して、各newsBlurbからテキストをつかむことができますが、それ自体で各要素を取得することはできません:たとえば
は、このHTMLを与えられました。私は、日付を取得し、どこかに貼り付ける、見出しのテキストを取得し、どこかにそれを貼り付け、使用するリンクを取得したい。しかし、私が得るのはdivの実際のテキストだけです。
私はこれからどのようにして得ることができますか?
EDIT は、ここで私が期待どおりに動作しない別の例です。なぜどんなアイデア?
$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);
$newsBlurbNode = $dom->query('div.note');
Zend_Debug::dump($newsBlurbNode);
これは私を与える:
$children = $newsBlurbNode->childNodes;
foreach ($children as $child) {
}
foreachループはそれに何も持っていないので、エラーが発生:
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 ')]"
}
は、私が使用し、この外の何かを取得しよう。ああ!私は何を得ていないのですか?
Thx ...私は実際にこれを理解する必要があるので、リンクされたページを通過します。 – Lothar
私はここで混乱しています...私はまだ私が期待した結果を得ていません。上記の私の編集を読む時間があれば、それを感謝します。 – Lothar
Zend_Dom_Query_Resultには子ノードがないのでうまくいきません。 Zend_Dom_Query_ResultをDOMオブジェクトに変換する方法を調べる必要があります。そして、それをループすることができます。 – wajiw