Laravel中简单HTML DOM解析器的问题

时间:2019-05-09 20:51:43

标签: php html dom

我正在将laravel-html-dom-parser软件包用于Laravel。

我想获取具有itemprop属性且值为“ price”的范围的值,所以我编写了这段代码,但显示错误。

$name = HTMLDomParser::str_get_html('http://www.tgju.org/chart/price_dollar_rl')->find('li > span > itemprop="price"')[0]->plaintext;

我得到的错误是:

  

preg_match_all():编译失败:字符类的偏移量为4的范围无效

2 个答案:

答案 0 :(得分:1)

使用简单的DOM解析器检索远程HTML的最快方法是使用file_get_html函数。您在此处使用的str_get_html函数用于从HTML字符串(而非来自远程源)初始化Simple DOM对象。

此外,要返回带有itemprop =“ price”的跨度,您将不使用>直接子选择器,而是使用属性选择器span[itemprop=price]。简单的DOM查询选择器的语法几乎与Javascript中使用的选择器相同,有关更多信息,请参见Mozilla docs

一起:

$name = HTMLDomParser::file_get_html('http://www.http://www.tgju.org/chart/price_dollar_rl')->find('li > span[itemprop=price]')[0]->plaintext

希望能回答您的问题,但是如果遇到问题,可以查阅Sourceforge上的Simple DOM文档。

答案 1 :(得分:1)

如果您有兴趣避免使用该库,而该库只是像2010这样的一段代码的包装,则可以使用本机代码:

<?php
libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHtmlFile('http://www.tgju.org/chart/price_dollar_rl');
$xpath = new DomXPath($dom);
$nodes = $xpath->query('//li/span[@itemprop="price"]');
if ($nodes->length) {
    echo $nodes[0]->textContent;
}

输出:

153,500

XPath语法可能很复杂,但是对于任何可以用CSS样式表示形式表示的东西来说,它都很容易理解。

我没看过,但是如果没有用于Laravel的适当的DOM库来包装这种本机功能,我会感到惊讶。