Php laravel中简单HTML DOM解析器的问题

Php laravel中简单HTML DOM解析器的问题,php,html,dom,Php,Html,Dom,我在用拉威尔的包裹 我想得到一个span的值,该span的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():编译失败:偏

我在用拉威尔的包裹

我想得到一个span的值,该span的
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处的字符类中的范围无效


使用简单DOM解析器检索远程HTML的最快方法是使用
file\u get\u HTML
函数。这里使用的
str\u get\u html
函数用于从html字符串而不是远程源初始化简单DOM对象

此外,要使用itemprop=“price”返回span,您不会使用
直接子选择器,而是使用属性选择器
span[itemprop=price]
。简单DOM查询选择器的语法与Javascript中使用的语法几乎相同,更多信息可在上找到

一起:

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

希望这能回答您的问题,但如果您陷入困境,您可以参考上的简单DOM文档。

如果您有兴趣避免使用此库,它只是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;
}
XPath语法可能很复杂,但对于任何可以用CSS样式表达式表示的东西,它都很容易理解


我还没有看过,但是如果没有适合Laravel的DOM库包装这个本机功能,我会感到惊讶。

您的PHP版本是什么?似乎是
laravelhtmldom解析器所使用的
sunra/php简单htmldom解析器
。还有一种选择:。@UgoT。我使用的是PHP7.3。在您介绍的这个包中,如何获取具有itemprop=“price”属性的span的值我从未使用过这个库,但类似的东西应该会返回您想要的:
$name=htmlcomparser::str\u get\u html('http://www.tgju.org/chart/price_dollar_rl')->查找(“li>span[itemprop='price']”,0)->纯文本这只是一个现代的包装器,包装了一段非常陈旧且编写糟糕的代码。还有更好的选择,包括PHP的内置函数。@miken32谢谢,如果我不使用这个软件包,如何使用PHP的内置函数呢?如果你想使用库,这是一个很好的现代选择。它为Symfony的BrowserKit和DomCrawler类提供了一个很好的前端。您可以使用XPath或CSS样式选择器进行筛选。
153,500