【问题标题】:XPath not returning results on Google App Engine for PHPXPath 未在 Google App Engine for PHP 上返回结果
【发布时间】:2023-04-11 04:09:01
【问题描述】:

我在 Google App Engine for PHP 上使用 XPath 时遇到问题。

所以我有以下代码:

function getDataXpath($url_str, $xpath_exp_str)
{
    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTMLFile($url_str);
    libxml_use_internal_errors(false);

    $xpath = new DOMXpath($doc);
    $elements = $xpath->query("".$xpath_exp_str."");

    if (!is_null($elements)) {
        return $elements;
    }

    return false;
}

然后我只是像这样运行它来获取节点:

getDataXpath($url_str, $xpath_exp_str);

所以在我的本地 PHP 安装 (v 5.5.19) 上,当我运行以下命令时:

$url_str = 'http://www.alexa.com/topsites/category;0/Top/Shopping';
$xpath_exp_str = "//ul/li[@class='site-listing']/div/p/a";
$xpath_data = getDataXpath($url_str, $xpath_exp_str);
print_r($xpath_data);

我得到以下结果:

DOMNodeList Object ( [length] => 25 ); 

这是正确的。

但是,当我在 Google App Engine for PHP (v 5.5.26) 上运行相同的代码时,我得到以下信息:

DOMNodeList Object ( [length] => 0 ); 

有人遇到过这个问题吗,你是怎么解决的?

【问题讨论】:

    标签: php google-app-engine xpath google-app-engine-php


    【解决方案1】:

    看来亚马逊可能会阻止以编程方式访问 Alexa TopSites 页面。我实际上订阅了他们的new API,但它不允许您像在网站上那样对响应(例如顶级电子商务网站)进行分类,这就是我求助于 XPath 的原因。

    我在其他一些 URL 上尝试了相同的脚本,但没有任何问题。

    无论如何,当我在本地(在浏览器和命令行中)运行它时它可以工作,所以我现在只需要跳过 Google App Engine。这是一个破碎的工作流程,特别是因为这是更大的自动化工作的一部分,但目前它不在我的掌控之中。

    【讨论】:

    • 您好,我为 Google Cloud Platform 提供社区支持,我想让您知道,类似这样的内容将成为 Public Issue Tracker for App Engine 的精彩帖子。只需发布一小段代码,让这个问题表现出来,我们就会重现它,看看我们能做些什么。
    • 嘿@Nick,感谢您的反馈。经过进一步审查,我认为这不是 Google App Engine 的错。我只在 Alexa Top Sites 上遇到过这个问题,因此作为整体网络抓取预防设置的一部分,他们可能会阻止 appspot.com 域。干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    相关资源
    最近更新 更多