2012-10-03 4 views
0

웹 페이지에서 데이터를 스크랩하려고합니다. 웹 페이지는 모든 페이지가 될 수 있습니다. 예를 들어, curl을 사용하여 http://www.google.com/을 긁어 모으고 있습니다. 그것은 많은 경고를 주며 아무것도하지 않습니다.잘 작성되지 않은 웹 페이지의 데이터 스크랩

경고 : 경고 라인 (30)에 SimpleXMLElement는 :: __) (구성 : C에서 : \ WAMP \ www가 \ nbacurl \

index.php에이 오류가 여러 번 반복했다.

나는 simplehtmldom에 대해 들었지만 다운로드했지만 사용 방법을 모르고있다. 구문 분석 할 페이지가 있지만 출구를 찾을 수 없습니다. 이것은 작동하지 않는 아주 간단한 코드입니다.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$contents = curl_exec ($ch); 

$xml = new SimpleXMLElement($contents); 
echo '<pre>' , print_r($xml) , '</pre'>; 
+0

시도 (거기에서 최선이 아니다) [phpQuery] (HTTP ://code.google.com/p/phpquery/) –

+0

감사합니다. Damien, 'simplehtmldom'을 사용하려고했지만 나에게 적합하지 않았습니다. 그래서 저는 4 줄의 곱슬 곱슬과 xml 곱셈을 가진 아주 기본적인 것으로 옮겼습니다. –

+0

그리고 내가 부탁을 들어, 내가 phpQuery에 새로운, wht 실제로합니까? 자사의 jQuery와 같은 함수를 만들고 거기에 내장 함수를 호출하는 곳 ?? 아니면 다른 것입니까? 고마워요 –

답변

0

희망 아무도는 "무관"인이 아래로 투표를하지 않습니다,하지만 난 웹 페이지를 긁어 매우 직관적이고 효과적인 찾을 mechanize을 사용했다. 작은 API로 배우기 쉽습니다.

방금 ​​파이썬이 아닌 PHP를 사용하고있는 것을 보았습니다. Mechanize는 python/perl 라이브러리이므로 여기서 관련이 없습니다.

+1

OP만이 파이썬을 사용하는 경우 .. –

+0

시간 내 주셔서 감사 드리며 언급 한 긁힌 자국을 살펴 보겠습니다. 내가 찾고있는 솔루션을 찾을 수 있기를 바랍니다. –

+0

죄송합니다. 내가 파이썬이라고 말한 것 같아. 따라서 PHP 파일에서 파이썬 스크립트를 실행하는 하이브리드 옵션을 사용할 수 있습니다. 그렇지 않으면이 제안은별로 가치가 없습니다. – ajon

1

SimpleXMLElement으로 구문 분석하지 마십시오. DOMDocument 또는 다른 솔루션이 HTML 구문 분석에보다 적합하도록 지정하십시오.

+0

마이크님께 감사드립니다. DOMDocument를 살펴보고 작동 방식을 살펴 보겠습니다. –

0

ScriptableBrowser (PHP의 경우) 시도해보십시오. 저는 개인적으로 Mechanize with Python으로 BeautifulSoup를 사용합니다.

+0

시간 내 주셔서 감사합니다,하지만 난 PHP에서 일하고 있어요 :) –

+0

ScriptableBrowser * is in PHP. – taco

+0

죄송합니다. 나는 잘못 인식합니다. 나는 그것에 대해 살펴보고 공유해 주셔서 감사합니다 :) –

0

DOMDocumentloadHTML 또는 loadXML (복구 사용 가능)을 사용하십시오. 전자는 당신이 정말로 원하는 것 같습니다.

<?php 
$doc = new DOMDocument(); 
$doc->loadHTML($contents); 

... 
?> 

참조 : 그 클래스가 실패 할 경우, 어쨌든 ... simplehtmldom 힘든를 사용하여 표시되지 않습니다 http://www.php.net/manual/en/class.domdocument.php#domdocument.props.recover

<?php 
$doc = new DOMDocument(); 
$doc->recover = TRUE; 
$doc->loadXML($contents); 

... 
?> 
+0

ur 시간에 감사드립니다. 그리고 나는 솔루션을 테스트했지만 아직 성공하지 못했습니다. 코드는 입니다. $ content = file_get_contents ('http://www.google.com/'); $ doc = new DOMDocument(); $ doc-> recover = true; echo '

' , print_r($doc->loadHTML($content)) , '
'; 경고 : DOMDocument :: loadHTML() : htmlParseEntityRef : 예상 ';' 엔터티에서 줄 : 40 (11 번) –

+0

컬 코드를 사용하여 내용을 가져옵니다. 그리고 이것은 단지 경고 일뿐입니다. DOM이 있어야합니다. DOMDocument-> saveXML(); print_r을 사용할 수 없습니다. – jimp

+0

이제 'Moved 302'라고 표시되어 문서가 여기로 이동되었습니다. 그것을 클릭하면 웹 페이지로 리디렉션됩니다. 어떻게'HTML/XML'을 얻을 수 있습니까? (? –