업데이트 : 소스 코드는 개발자 도구의 내용과 매우 다릅니다.PHP Xpath 스크래핑 가능한 네임 스페이스 문제
체크 아웃 소스 :보기 소스 : HTTP : //www.machinerytrader.com/list/list.aspx ETID = 1 & CATID = 1002
인가를하는 렌더링 할 필요가 자바 스크립트 HTML로 브라우저? 그렇다면 PHP를 어떻게 처리하여 HTML을 파싱 할 수 있습니까? Xpath Checker를 사용하여 내가 찾고있는 항목을 반환 할 수 있지만 (아래 참조) 전체 HTML에는 액세스 할 수 없습니다.
(XPath는 : // 테이블 [(@id 'ctl00_ContentPlaceHolder1')를 포함하고, ((@id "tblContent")를 포함하거나 포함 (@id "tblListingHeader"))])
END의 UPDATE
정기적으로 업무를 위해이 사이트에서 일부 정보를 긁어 내야합니다. 나는이 데이터를 긁기 위해 PHP 코드를 작성하려고 시도하고있다. 나는 네임 스페이스 문제가 여기에 있다고 생각하며, 많은 다른 게시물을 읽었습니다. 나는 이전에 네임 스페이스 문제를 겪어 본 적이 없으며 다른 SO 게시물에 표시된 접근법을 사용하지 않았다. (아무 소용이 없다 :().
xpath 쿼리는 어떠한 이유로도 발생하지 않는 것처럼 보입니다. .이 문제를 처리하는 방법을, 나는 제안을 열고 오전
을 또한 여기 내 코드의 출력은 다음과 같습니다
object(DOMXPath)#2 (0) {
}
Debug 1
array(0) {
}
array(0) {
}
은 내가 testarray을 위해서 var_dump 작성하고 otherarray 위해서 var_dump 코드의 바닥을 떠났다. DOMXPath 요소의 길이가 0이면 물론 두 배열이 비어 있습니다.
$string = 'http://www.machinerytrader.com/list/list.aspx?ETID=1&catid=1002';
$machine_trader = file_get_contents($string);
$xml = new DOMDocument();
$xml->loadHTML($machine_trader);
$xpath = new DOMXPath($xml);
$rootNamespace = $xml->lookupNamespaceUri($xml->namespaceURI);
$xpath->registerNamespace('x', $rootNamespace);
$tableRows = $xpath->query("//x:table[contains(@id, 'ctl00_ContentPlaceHolder1') and (contains(@id,'tblContent') or contains(@id,'tblListingHeader'))]");
var_dump($xpath);
$testarray = array();
$otherarray = array();
foreach ($tableRows as $row)
{
echo "Debug 1"."\n";
$testarray[] = $row->nodeValue;
}
나는 이것이 대답이 될 것이라고 두려워했다. (NodeJS로 나를 안내해 주셔서 고마워요. – Dedwards