更新:源代码与开发者工具显示的有很大不同。
查看来源:view-source:http://www.machinerytrader.com/list/list.aspx?ETID=1&catid=1002
是需要由浏览器呈现为 html 的 javascript 吗?如果是这样,我怎样才能让 php 执行该过程以便我有 Html 来解析?奇怪的是,您可以使用 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) {
}
我遗漏了代码的底部,其中我 var_dump testarray 并创建和 var_dump otherarray。他们的输出包括在上面。显然,如果 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;
}