更新: ソース コードは、開発者ツールが示すものとは大きく異なります。
ソースを確認してください: view-source:http://www.machinerytrader.com/list/list.aspx?ETID=1&catid=1002
ブラウザで html にレンダリングする必要があるのは JavaScript ですか? もしそうなら、Htmlを解析できるようにphpにそのプロセスを実行させるにはどうすればよいですか? Xpath Checker を使用して探しているアイテムを返すことができるのは奇妙ですが (以下を参照)、完全な html にアクセスすることはできません!
(Xpath: //table[contains(@id, 'ctl00_ContentPlaceHolder1') and (contains(@id,"tblContent") or contains(@id,"tblListingHeader"))]))
更新を終了
定期的に仕事をするために、このサイトからいくつかの情報をかき集める必要があります。このデータをスクレイピングするための PHP コードを作成しようとしています。SOに関する他の多くの投稿を読んだので、ここにいくつかの名前空間の問題があると思います。以前に名前空間の問題に遭遇したことはなく、別の SO 投稿に示されているアプローチを使用しました (役に立たなかった:()。
なんらかの理由で xpath クエリが発生していないようです。この問題を処理する方法について推測や解決策がある場合は、提案を受け付けています。
また、ここに私のコードからの出力があります:
object(DOMXPath)#2 (0) {
}
Debug 1
array(0) {
}
array(0) {
}
testarray を var_dump し、otherarray を作成して var_dump するコードの下部を省略しました。それらの出力は上記に含まれています。DOMXPath 要素の長さが 0 の場合も、明らかに 2 つの配列は空になります。
$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;
}