使用 PHP Simple HTML DOM Parser 获取文本

Posted

技术标签:

【中文标题】使用 PHP Simple HTML DOM Parser 获取文本【英文标题】:Get text with PHP Simple HTML DOM Parser 【发布时间】:2012-04-08 21:29:53 【问题描述】:

我正在使用 php Simple html DOM Parser 从网页中获取文本。 我需要操作的页面是这样的:

<html>
<head>
<title>title</title>
<body>
<div id="content">
<h1>HELLO</h1>
Hello, world!
</div>
</body>
</html>

我需要获取h1 元素和没有标签的文本。 要获得h1,我使用以下代码:

$html = file_get_html("remote_page.html");
foreach($html->find('#content') as $text)
echo "H1: ".$text->find('h1', 0)->plaintext;

但是其他文本呢? 我也在 foreach 中尝试了这个,但我得到了全文:

$text->plaintext;

但它也返回了H1 标签...

【问题讨论】:

为什么要让plaintext 成员返回其他内容? 我只需要“你好,世界!”部分,有可能吗? 我猜是这样,但我不能推荐 Simple HTML DOM Parser,而只推荐 DOMDocument。那就是-&gt;nodeValue 我也遇到了同样的问题,我想在标签之外的标签后面提取文本... 【参考方案1】:

看起来$text-&gt;find('text',2); 得到了您正在寻找的东西,但是我不确定当文本节点的数量未知时它的效果如何。我会继续寻找。

【讨论】:

【参考方案2】:

您可以使用 strip_tags 简单地去除 html 标签

<?php
strip_tags($input, '<br>');
?>

【讨论】:

为什么要排除&lt;br&gt; 标签? OP说所有标签都需要剥离。 你可以留空。【参考方案3】:

正如@Peachy 指出的那样,使用条形标签。但是,将第二个参数 &lt;br&gt; 传递给它意味着字符串将 忽略 &lt;br&gt; 标签,这是不必要的。在你的情况下,

<?php
    strip_tags($text);
?>

如果您只选择content id 中的内容,可以按您的意愿工作。

【讨论】:

【参考方案4】:

试试看

echo "H1: ".$text->find('h1', 0)->innertext;

【讨论】:

以上是关于使用 PHP Simple HTML DOM Parser 获取文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 和 Simple HTML DOM 解析 HTML 时遇到问题

使用php simple html dom parser解析html标签

php simple_html_dom.php 去掉html标签

php解析html类库simple_html_dom

使用 php simple html dom 抓取时需要帮助修复 html [重复]

使用 PHP Simple HTML DOM Parser 获取文本