1

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

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

我只是想知道是否没有任何 php 库提供从 HTML 文档中获取所有非 html/非 javascript/非 xml/非代码字的特定功能。我知道这听起来可能是一项艰巨的任务,而且我并不追求完美,但如果有一个解决方案在大多数网页上 80% 可靠,我会很高兴。

感谢任何人都可以提供的任何帮助!

4

2 回答 2

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

演示

于 2013-08-22T03:05:35.390 回答
0

事实证明,来自nadeau 软件的 PHP 解析代码实际上比我最初认为的更健壮 --- 在额外的修补中,我发现我遇到的问题是由于我提供的解析器 html 内容不是正确编码为 utf-8。

不幸的是,似乎没有任何现有的库可以处理如此复杂的用例,但至少我能够让教程代码在大量测试用例上工作。

于 2013-08-28T22:51:26.487 回答