【发布时间】:2015-11-03 21:03:57
【问题描述】:
我正在尝试检索亚马逊产品的价格。 我尝试了两种方法:
-
file_get_contents-> 正则表达式 -> 有效。 - 使用 DOMXPath -> 出于某种原因不起作用。
我注意到,如果 javascript 已启用,价格的 xpath 与 xpath 不同,而 javascript 已禁用。
无论如何,如何使用 xpath 检索价格?
这就是我正在做的,但代码什么也没返回(即使它在任何其他网站上都可以运行):
(xpath 是使用 firebug 获取的)
$url = 'http://www.amazon.com/dp/product/B00TRQPSXM/';
$path = '/html/body/div[3]/form/table[3]/tbody/tr[1]/td/div/table/tbody/tr[2]';
$html = file_get_contents($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query($path);
if($elements)
{
foreach($elements as $element)
{
echo $element->nodeName.'<br>';
echo $element->nodeValue.'<br>';
}
}
【问题讨论】:
-
您正在处理外部资源。永远不要假设成功。始终检查 f_g_c() 是否确实返回了有用的 html。并且不要使用
@来抑制错误。这相当于把你的手指塞进耳朵里然后“拉拉拉拉听不到你的声音”。 -
就像 MarcB 所写的那样,想知道为什么
dom->loadHTML($html);在抑制错误时不起作用是一个坏主意 (tm)。亚马逊网站通常以无效 HTML 闻名,因此您可能需要对其进行一些修复/恢复操作。 php.net/tidy / php.net/class.domdocument#domdocument.props.recover
标签: php dom xpath web-scraping domdocument