2013-03-16 5 views
2

에서 이것은 내 첫 번째 게시물입니다 내가 잘못하고있어 경우에 미안하지만, 여기에 우리가 간다 : 나는 웹 사이트에서 값을 긁어한다 프로젝트를 진행했습니다구문 분석 CDATA는 자바 스크립트

. 값은 자바 스크립트 배열의 변수입니다. 나는 PHP Simple HTML DOM을 사용하고 있으며 CDATA 블록에 저장된 스크립트가 아닌 일반 스크립트와 함께 작동합니다. 따라서 CDATA 블록 내에서 데이터를 스크래핑하는 방법을 찾고 있습니다. 불행히도, 내가 찾을 수있는 모든 도움은 XML 파일에 대한 것이었고 HTML 파일에서 긁어 모으고 있습니다.

내가 긁어 노력하고있어 자바 스크립트는 다음과 같습니다

<script type="text/javascript"> 
//<![CDATA[ 
var data = [{"value":8.41,"color":"1C5A0D","text":"17/11"},{"value":9.86,"color":"1C5A0D","text":"18/11"},{"value":7.72,"color":"1C5A0D","text":"19/11"},{"value":9.42,"color":"1C5A0D","text":"20/11"}]; 
//]]> 
</script> 

은 내가 긁어 필요하면 var에 데이터 -variable "값"입니다.

문제는 개체에서 CDATA 문자열을 바꾸려고했습니다. 다음 코드는 필요한 경우 :-)

include('simple_html_dom.php'); 

$lines = file_get_contents('http://www.virtualmanager.com/players/7793477-danijel-pavliuk/training'); 

$lines = str_replace("//<![CDATA[","",$lines); 
$lines = str_replace("//]]>","",$lines); 

$html = str_get_html($lines); 

foreach($html->find('script') as $element) { 
    echo $element->innertext; 
} 

내가 더 많은 정보를 제공 할 것입니다 완벽하게 작동합니다.

+0

파서에 전달하기 전에 HTML 텍스트를 버퍼링하고 검색 및 교체하여 // 구조를 제거하십시오. 그들은 완전히 무의미하며 수년간 지 냈습니다. – millimoose

+0

또한 예제 URL에 이상한 공백이 있습니다. 그건 오타예요? 문제는 방금 페이지를로드 할 수 없기 때문일 수 있습니다. 즉,'$ html-> find ('script')는 심지어 * anything *을 찾습니까? – millimoose

+0

그건 오타 였고 지금 고칠 수있었습니다. 나는 CDATA를 제거하려고 시도했지만 다음과 같은 오류가 발생합니다. "치명적인 오류 : 부재 함수 find()가 아닌 객체에서 호출 ..." 지금 내가하고있는 일을 통해 게시물을 업데이트했습니다. – user1807556

답변

2

괜찮은 HTML 파서는 CDATA 블록으로 자바 스크립트를 감싸서는 안됩니다. 그들은 그것을 떨어져 던지는 경우, 그냥이 같은 일을하고, 구문 분석하기 전에 HTML에서 제거 :

  1. file_get_contents() 또는 cURL 그 기능의 호스트 장애인 HTTP를 지원하는 경우를 사용하여 문자열로 HTML 파일을 다운로드합니다.
  2. str_replace()
  3. 는 DOM 객체 이전과 간단한 DOM의 str_get_html()
  4. 프로세스를 사용하여 청소 문자열에서 HTML을 구문 분석하여 //<![CDATA[//]]> 비트를 제거하십시오.
관련 문제