我正在将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的范围无效
答案 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库来包装这种本机功能,我会感到惊讶。