XPath未在Google App Engine for PHP上返回结果


XPath not returning results on Google App Engine for PHP

我在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安装(v5.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 ); 

这是正确的。

然而,当我在GoogleAppEngineforPHP(v5.5.26)上运行相同的代码时,我得到了以下内容:

DOMNodeList Object ( [length] => 0 ); 

有人遇到过这个问题吗?你是如何解决的?

因此,亚马逊似乎正在阻止对Alexa TopSites页面的编程访问。我实际上订阅了他们新的API,但它不允许像在网站上那样对响应(例如顶级电子商务网站)进行分类,这就是我使用XPath的原因。

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

无论如何,当我在本地(浏览器和命令行)运行它时,它是有效的,所以我现在只需要跳过谷歌应用程序引擎。这是一个支离破碎的工作流程,尤其是因为这是一项更大的自动化工作的一部分,但在这一点上,它已经超出了我的控制范围。