【发布时间】:2019-06-12 21:44:43
【问题描述】:
我正在尝试以纯文本格式提取网页内容 - 没有 html 标签。下面是一些示例代码:
$dom = \Sunra\PhpSimple\HtmlDomParser::file_get_html($url);
$result['body'] = $dom->find('body', 0)->plaintext;
问题是我在 $result['body'] 中得到的东西非常混乱。当然,HTML 已被删除,但句子经常合并到其他句子中,因为没有空格或句点来分隔一个 HTML 标记中的文本结束的位置,以及下一个标记中的文本开始的位置。
一个例子:
<body>
<div class="H2">Header</div>
<div class="P">this is a paragraph</div>
<div class="P">this is another paragraph</div>
</body>
结果:
“标题这是一个段落这是另一个段落”
想要的结果:
“标题。这是一个段落。这是另一个段落”
有没有什么方法可以格式化纯文本的结果,或者在使用纯文本实现句子的清晰分隔符之前对内部文本进行额外的操作?
编辑:
我正在考虑做这样的事情:
foreach($dom->find('div') as $element) {
$text = $element->plaintext;
$result['body'] .= $text.'. ';
}
但是嵌套 div 时会出现问题,因为它会添加父级的内容,其中包括来自所有子级的文本,然后添加子级的内容,从而有效地复制文本。这可以通过检查$text 中是否有</div> 来解决。
也许我应该试试callbacks。
【问题讨论】:
-
你的问题有点不清楚。通过删除 HTML 标记,您以某种方式从文本中删除了格式,但您实际上需要某种其他类型的格式,您需要以更精确的方式定义这些格式。您想对文本应用什么样的操作?你想要的输出是什么?
-
我添加了一个示例以进行说明
标签: php html web-scraping simple-html-dom