아주 가벼운 스크린 스크래핑을 위해 Zend_Dom을 사용하려고합니다. (내 웹 사이트에서 뉴스 항목의 작은 블록에서 헤드 라인, 일부 본문 및 링크를 가져오고 싶습니다.) 어떻게 처리 할 지 잘 모르겠습니다. 그것이 나에게주는 DOMElement. Zend_Dom의 사용 설명서에Zend_Dom은 DOMElement를 제공합니다 ... 어떻게 사용합니까?
코드는 말합니다 :
foreach ($results as $result) {
// $result is a DOMElement
}
가 어떻게이 DOMElement의 사용을해야합니까?
상세한 예 (구글의 앵커 요소를 찾고이) :
$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...
을하지만이 문제로 실행할 경우 특정 요소와 그 내용을 받고있다.
는 예를 들어이 HTML을 제공 :
<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>
은 내가 구글의 예에서 사용하는 기술을 사용하여, 각 newsBlurb에서 텍스트를 잡을 수 있지만, 그 자체로 각 요소를 얻을 수 없습니다. 나는 날짜를 얻고 어딘가에 그것을 붙이고 싶다, 표제 텍스트를 얻고 어딘가에 그것을 찌르고 사용하기 위하여 연결을 얻으십시오. 그러나 내가 얻는 것은 div의 실제 텍스트입니다.
내가 원하는 것을 어떻게 얻을 수 있습니까?
편집 는 여기에 예상대로 작동하지 않는 또 다른 예이다. 어떤 아이디어?
$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);
이 저를 제공합니다
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 ')]"
}
내가 사용이 밖으로 아무것도 얻을려고 다음 foreach 루프 그것에 아무 상관이 없기 때문에 오류가 발생
$children = $newsBlurbNode->childNodes;
foreach ($children as $child) {
}
합니다. 응! 나는 무엇을 얻지 못합니까?
Thx ... 나는 이것을 실제로 이해해야하므로 링크 된 페이지를 살펴 보겠습니다. – Lothar
나는 혼란 스럽다. 나는 기대했던 결과를 아직 얻지 못하고있다. 위의 편집을 읽을 시간이 있으면 감사하겠습니다. – Lothar
Zend_Dom_Query_Result에 자식 노드가 없어서 작동하지 않습니다. Zend_Dom_Query_Result를 DOM 객체로 변환하는 방법을 찾아야 만 루프를 돌릴 수 있습니다. – wajiw