2014-09-01 6 views
2

나는 그 질문에 관련된 많은 답변을 보았습니다. 그러나 극복 할 수없는 약간의 차이점이 있거나 내가 보여준 프로세스를 반복 할 수 없었습니다.DOM 구조, 속성 이름/값을 기준으로 요소 가져 오기

CURL을 사용하여 Google+ 비즈니스 페이지에서 HTML을 가져 와서 HTML을 반복하고 리뷰 한 HTML을 비즈니스가 아닌 Google + 웹 페이지에 표시하기 위해 검토합니다.

모든 리뷰 공유

이 부모 DIV 구조 : 따라서

<div class="ZWa nAa" guidedhelpid="userreviews"> ..... 

내가 찾아 속성으로 각 사업부의 사업부 및 innerHTML을 잡는 기반으로 foreach 루프를 수행하려고 : guidehelpid = "userreviews"

CURL을 통해 HTML을 성공적으로 가져 왔으며 "a"와 같은 표준 태그 이름을 타겟팅하거나 ID가있는 경우 구문 분석 할 수 있지만 속성 이름을 찾을 때 PHP 기본 구문 분석기를 사용하여 HTML을 반복하는 것은 문제가 있습니다. :

어떻게이 성공적인 코드를 아래의 코드로 받아 들여 두 번째 코드에 표시된 것과 같이 의도 한대로 작동시킬 수 있습니까?

작업 CODE

$url = "https://plus.google.com/+Mcgowansac/about"; 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
$output = curl_exec($curl); 
curl_close($curl); 
$DOM = new DOMDocument; 
@$DOM->loadHTML($output); 


foreach($DOM->getElementsByTagName('a') as $link) { 
     # Show the <a href> 
     echo $link->getAttribute('href'); 
     echo "<br />";} 

이론적으로 NEEDED CODE (도착, 에코는 모두 "A"$ 출력의 태그입니다 검색해,) :은 (HTML에서 사용자 지정 특성에 의해 모든 검토를 찾아 그들을 에코)

$url = "https://plus.google.com/+Mcgowansac/about"; 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
$output = curl_exec($curl); 
curl_close($curl); 
$DOM = new DOMDocument; 
@$DOM->loadHTML($output); 


foreach($DOM->getElementsByTagName('div[guidehelpid=userreviews]') as $review) { 
     echo $review; 
     echo "<br />"; } 

이 문제를 해결하면 도움이 될 것입니다. 내가 그것을없이 이것을 달성 할 수 있다면 "simple_html_dom"을 사용하지 않는 것을 선호한다.

+0

보다는 당신 getElementsByTagName ('DIV [guidehelpid = userreviews]') 당신은 단지 하나의 큰 배열에있는 모든 div의 스틱과 (자신의 솔루션을 롤?)들을 반복 할 수 없습니다 - 또는 수 거기에 다양한 XQUERY 형식 클래스 중 하나를 사용하십시오 (의사 코드가 올바르게 수행하려고하는 것입니까?) – splig

+0

페이지 응답의 모든 DIV를 배열에 집어 넣은 다음 배열을 반복하면 스크립트로드가 크게 증가하는 것처럼 보입니다 . 어쩌면 메신저 잘못하지만 정말 비효율적 인 것 같습니다. 나는 그것을 시도 할 것이고 그것이 어떻게 작동하는지 볼 것이다. – DMSJax

+0

예, 서버 CPU/서버로드가 많이 추가 될 것 같습니다. 최근에 보지 않았지만 네이티브 (예 : 컴파일 된 C) XQUERY 라이브러리가 있으면 멋지고 빠를 것입니다. 효율적이고 정확한 쿼리를 수행 할 수 있습니다. – splig

답변

0

이 경우에도 DOMXpath을 사용할 수 있습니다. 예 :

$url = "https://plus.google.com/+Mcgowansac/about"; 
$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
$output = curl_exec($curl); 
curl_close($curl); 

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($output); 
libxml_clear_errors(); 
$xpath = new DOMXpath($dom); 

$review = $xpath->query('//div[@guidedhelpid="userreviews"]'); 

if($review->length > 0) { // if it exists 
    echo $review->item(0)->nodeValue; 
    // echoes 
    // John DeRemer reviewed 3 months ago Last fall, we had a major issue with mold which required major ... and so on 
} 
+0

유령 보이는 유령, 나는 밤에 끝났지 만 아침에 그것을 시도합니다. 제안 및 예제 감사합니다. – DMSJax

+0

@DMSJax 확실한 사람은 아무런 답이 없습니다 – Ghost

+0

다시 답변 드리겠습니다. 결과를 실제로 반환했기 때문에 답변을 수락 할 것입니다. 그러나 반환 된 데이터는 ID를 가지고 부모 클래스에서 CSS 클래스가 공유되지 않으므로 개별 "리뷰"로 구문 분석하여 표시 할 수 있도록 CSS를 표시 할 수있는 공포스러운 일입니다. 이 특별한 접근 방식을 포기하고 새로운 것을 시도 할 것입니다. 감사! – DMSJax

관련 문제