2009-05-07 3 views
3

"웹 스크래핑"중에 정확한 테이블을 가져 오려고합니다. cURL을 사용하여 페이지를 $ html로 가져 오면 성공합니다.Firefox가 테이블 요소를 찾았음에도 불구하고 PHP XPath가 테이블 요소를 찾지 않는 이유는 무엇입니까?

정확하게 필요한 XPATH를 얻기 위해 방화 광을 사용했습니다.

코드는 다음과 같습니다 실행되면, $ summary-이> 길이는 항상 0입니다

$dom = new DOMDocument($html); 
$dom->loadHTML($html); 

$xpath = new DOMXpath($dom); 
$summary = $xpath->evaluate('/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[8]/td/table'); 
echo "Summary Length: " . $summary->length; 

. 테이블 노드는 당기지 않습니다.

아이디어가 있으십니까?

+0

가능한 중복 TML 테이블)은 Firebug에서만 작동하지만, 현재 개발중인 애플리케이션에서는 작동하지 않습니까?] (http://stackoverflow.com/questions/18241029/why-does-my-xpath-query-scraping-html-tables-only-work -in-firebug-but-not-the) –

답변

4

Firefox는 "가상"tbody 요소가없는 테이블에 삽입하기 쉽습니다. 그 요소들은 원래 파일에 존재합니까?

+0

아니요, 그렇지 않습니다. 하지만 나는 그들을 파이어 폭스에서 본다. 필자는 XPath 검사기도 사용했으며 필요한 데이터를 볼 수 있습니다. 그러나 그것을 PHP xpath-> evaluate에서 사용하면 결코 데이터를 반환하지 않습니다. –

+0

안에 직접 허용되지 않습니다. //이 있어야합니다. 직접 지정하지 않으면 의미가 있습니다. HTML은 그와 같이 이상합니다 ... 시작 태그와 종료 태그는 모두 선택 사항 일 수 있습니다! – Greg

+0

tbody 요소가 원래 파일에 없으면 PHP xpath 쿼리에 포함되어서는 안됩니다. –

2

"/ tbody"를 삭제하십시오. XPath는에서 당신은 파이어 폭스에서 가져온 :

.//*[@id='data']/tbody/tr[1]/td[2]/span

을이를 만듭니다

알로에 .//*[@id='data']/tr[1]/td[2]/span

[왜 (H 내 XPath 쿼리 긁어 않습니다의
관련 문제