我在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 );
有没有人有这个问题,你是怎么解决的?
答案 0 :(得分:1)
因此,似乎亚马逊可能阻止对Alexa TopSites页面的编程访问。我实际上订阅了他们的new API,但它不允许您像在网站上那样对回复(例如顶级电子商务网站)进行分类,这就是我的原因。求助于XPath。
我在其他一些网址上尝试了相同的脚本,但我没有遇到任何问题。
无论如何,当我在本地(在浏览器和命令行中)运行它时它会起作用,所以我现在只需要跳过Google App Engine。这是一个破碎的工作流程,特别是因为这是一个更大的自动化工作的一部分,但它现在不在我的手中。