Php Dom和XPath抓取-这里怎么了?

Php Dom和XPath抓取-这里怎么了?,php,dom,xpath,Php,Dom,Xpath,我需要从互联网上的网页上抓取一段文本,我正在使用dom和xpath查找数据,但是我似乎无法选择我需要的确切信息。这是到目前为止我的代码,问题在于item0->nodeValue部分-这适用于我的其他刮片,我已经为另一个页面,但不是这个页面 $argos_html = file_get_html('http://www.argos.co.uk/static/Product/partNumber/9282197/Trail/searchtext%3EIPOD+TOUCH.htm'); $dom_a

我需要从互联网上的网页上抓取一段文本,我正在使用dom和xpath查找数据,但是我似乎无法选择我需要的确切信息。这是到目前为止我的代码,问题在于item0->nodeValue部分-这适用于我的其他刮片,我已经为另一个页面,但不是这个页面

$argos_html = file_get_html('http://www.argos.co.uk/static/Product/partNumber/9282197/Trail/searchtext%3EIPOD+TOUCH.htm');

$dom_argos= new DOMDocument();
$dom_argos->loadHTML($argos_html);

$xpath_argos = new DOMXpath($dom_argos);

$expr_currys = "/html/body/div[4]/div[3]/form/div[2]/div/div[5]/ul/li[3]/span";
$nodes_argos = $xpath_argos->query($expr_argos);

$argos_stock_data = $nodes_argos->item(0)->nodeValue;
谁能告诉我哪里出了问题?因为我总是得到一个错误,它与->项0->节点值有关;然而,如果我把这一部分注释掉,就不会有错误,但根本没有收集到任何数据

也许它只是->无价值

我知道这可能是由于页面结构,但我对所有这些都是新手!
Thx运行您的代码,我首先得到:

Notice: Undefined variable: expr_argos
Warning: DOMXPath::query() [domxpath.query]: Invalid expression
因此,首先,确保您使用的XPath查询是有效的—例如,您应该有以下内容:

$nodes_argos = $xpath_argos->query($expr_currys);
而不是您当前拥有的:

$nodes_argos = $xpath_argos->query($expr_argos);
然后,您会得到以下错误:

Notice: Trying to get property of non-object
在以下行:

$argos_stock_data = $nodes_argos->item(0)->nodeValue;
基本上,这意味着您正在尝试读取非对象上的属性nodeValue:$nodes_argos->item0

我猜您的XPath查询是无效的;因此,对xpath方法的调用不会返回任何有趣的结果


您应该检查XPath查询的长度,以便于理解,确保它与HTML页面中的内容匹配。

我在Firefox中使用XPath时,您的XPath很好,但它不能与DOM一起使用,这并不奇怪。我假设您是从某种浏览器插件获得XPath的,该插件能够返回某些元素的路径。但是,您不应该信任浏览器插件返回的XPath,因为浏览器将通过JavaScript修改DOM,并在必要时添加隐含值。改用原始源代码

您的XPath在Firefox中的计算结果为2天内送达,这不是我在名为stock_data的变量中所期望的。但无论如何,这应该可以做到:

$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->loadHTMLFile('http://www.argos.co.uk/static/Product/partNumber/9282197/Trail/searchtext%3EIPOD+TOUCH.htm');
libxml_clear_errors();

$xpath = new DOMXpath($dom);
$nodes = $xpath->query(
    '/html/body//div[@id="deliveryInformation"]/ul/li[@class="home"]/span'
);
echo $nodes->item(0)->nodeValue; // "Home delivery within 2 days"

这个错误可能是因为您没有选择任何元素:当没有节点时,您不能调用nodeValue!您的XPath可能有一个错误——它非常复杂,所以我并不感到惊讶。看看能否找到一种更简单的方法来指定所需的元素。元素ID将是一个很好的起点。如果您遇到错误,请告诉我们它是什么。这对你来说可能毫无意义,但对这个论坛上的某个人来说可能意义重大。为你的回答干杯,哦,不,是我再次复制和粘贴,这就是为什么咖喱在那里,它应该都是argos。我有多个在线零售商,我正试图刮。谢谢你的解释,我会继续写更多的代码!你说的对,我用了一个插件!还有我忘了把它改成argos的变量,Curry是我试图从中获取数据的另一个零售商。此外,我还需要一种检查产品是否有库存的方法,因此我想零售商会如何在其网站上说明产品是否有库存,并使用if声明进行检查,以便最终验证是否不包含送货上门。。。。然后它将返回为false/没有库存!我对这一切都很陌生,并承担了一个具有挑战性的项目!无论如何,非常感谢您的回复,现在开始编写代码@James请回顾到目前为止给出的答案,要么接受解决您问题的答案,要么更新并改进您的问题,指出为什么这些答案都不能解决您的问题,这样人们就有机会改进他们的答案。谢谢