gpt4 book ai didi

PHP Xpath 抓取可能的命名空间问题

转载 作者:行者123 更新时间:2023-12-04 17:04:41 26 4
gpt4 key购买 nike

更新:源代码与开发人员工具显示的非常不同。

查看源码:view-source:http://www.machinerytrader.com/list/list.aspx?ETID=1&catid=1002

那个javascript需要被浏览器渲染成html吗?如果是这样,我如何让 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 和 create 和 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;

}

最佳答案

这不是 XPath 问题,因为实际内容是从您尚未到达的表单帖子中找到的。这里的 JS 源代码只不过是验证信息请求的正确“用户”,然后通过表单提交发送请求。

在每次请求时,盐/加密“ key ”都是随机的并发生变化,以防止简单的抓取。

您可以将该 JavaScript 重写为 PHP,然后发出两个请求,并在此过程中与身份验证过程作斗争。

或者,与其进行逆向工程,不如将抓取切换到 NodeJS 并使用类似 PhantomJS 的东西。因为它可以评估 javascript 但给你编程访问。鉴于此任务的复杂性,使用正确的工具会简单得多。

关于PHP Xpath 抓取可能的命名空间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12802305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com