在PHP中从HTML解析文本内容的强大方法?

时间:2013-08-22 02:56:43

标签: php html-parsing

我正在尝试找到一种强大的方法来解析HTML文档中的所有文本(即非HTML /非代码/非脚本内容)。我正在谈论在互联网上的任何输入网页上提取关键字。我正在编写一个关键字蜘蛛,它使用PHP跟踪网页上的关键字趋势,虽然我发现了许多实际读取内容的好方法(比如DOMDocument和cURL),但我很难找到任何内容。实时解析所有单词内容的强大解决方案,与Internet上任何旧随机页面上的HTML / Javascript / CSS /等分开。

我首先尝试使用strip_tags(),但它有许多javascript和其他xml可能在页面上的工件。我也试过Simple HTML DOM,但它似乎有标点符号和空白处理问题。我终于尝试在nadeausoftware上的教程中构建一个库,虽然它在大多数页面上运行得非常好,但在某些页面上它根本不返回任何内容(我想是尝试使用正则表达式进行解析的诅咒)

我只是想知道是否有任何php库提供了从中获取所有非html / non-javascript / non-xml / non-code words 的特定功能一个HTML文档。我知道这可能听起来像是一个很高的订单,而且我并不是在寻求完美,但如果有一个大多数网页上80%可靠的解决方案,我会很高兴。

感谢任何人提供的任何帮助!

2 个答案:

答案 0 :(得分:1)

您可以加载文档,删除不需要的标记,然后查询textContent属性:

$html = '<html><head><style type="text/css">hola</style></head><body><script>tada</script><a href="#">hello <span>world</span></a></body></html>';

$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('*') as $node) {
    if (in_array($node->nodeName, array('script', 'style'))) {
        $node->parentNode->removeChild($node);
    }
}
echo $dom->documentElement->textContent;
// hello world

Demo

答案 1 :(得分:0)

事实证明,来自nadeau software的PHP解析代码实际上比我原先给它的信誉更强大 - 在额外修补时,我发现我遇到的问题是由于我提供了解析器没有正确编码为utf-8的HTML内容。

很遗憾,似乎没有任何现有的库来处理这样一个复杂的用例,但至少我能够获得教程代码来处理大量的测试例。