【问题标题】:Problem with Simple HTML DOM Parser in laravellaravel 中简单 HTML DOM 解析器的问题
【发布时间】:2019-09-27 18:16:03
【问题描述】:

我正在为 Laravel 使用 laravel-html-dom-parser 包。

我想获取一个具有 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 处的字符类范围无效

【问题讨论】:

  • 你的 PHP 版本是多少?似乎sunra/php-simple-html-dom-parser 被laravel-html-dom-parser is not compatible with PHP 7.3 使用。还有一个替代方案:github.com/Kub-AT/php-simple-html-dom-parser.
  • @UgoT。我正在使用 php 7.3。在您介绍的这个包中,我如何获取具有 itemprop="price" 属性的跨度的值
  • 我从来没有使用过这个库,但类似的东西应该会给你你想要的东西:$name = HTMLDomParser::str_get_html('http://www.tgju.org/chart/price_dollar_rl')->find("li > span[itemprop='price']", 0)->plaintext;
  • 这只是一个现代包装器,围绕着一段非常过时且写得不好的代码。还有更好的选择,包括 PHP 的内置函数。
  • @miken32 谢谢,如果我不使用这个包怎么能用 PHP 的内置函数做到这一点

标签: php html dom


【解决方案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 库来包装这个原生功能,我会感到惊讶。

【讨论】:

  • 看起来 Goutte 如果您想使用库,是一个很好的现代替代方案。它为 Symfony 的 BrowserKit 和 DomCrawler 类提供了一个很好的前端。您可以使用 XPath 或 CSS 样式的选择器进行过滤。
【解决方案2】:

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

此外,要返回带有 itemprop="price" 的跨度,您不会使用 &gt; 直接子选择器,而是使用属性选择器 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 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2012-01-17
    相关资源
    最近更新 更多