繁体   English   中英

如何使用PHP从HTML文件提取所有文本?

[英]how to extract all text from HTML file using PHP?

如何从HTML文件中提取所有文本

我想提取所有文本,包括alt属性,<p>标记等。

但是我不想提取样式和脚本标签之间的文本

谢谢

现在我有以下代码

    <?PHP
    $string =  trim(clean(strtolower(strip_tags($html_content))));
    $arr = explode(" ", $string);
    $count = array_count_values($arr);
    foreach($count as $value => $freq) {
          echo trim ($value)."---".$freq."<br>";
    }

    function clean($in){
           return preg_replace("/[^a-z]+/i", " ", $in);
    }

    ?>

这很好用,但是它会检索我不想检索的脚本和样式标签,另一个问题是我不确定它是否会检索alt之类的属性-因为strip_tags函数可能会删除所有带有其属性的HTML标签

谢谢

我个人认为您应该切换到某种XML阅读器( SimpleXMLDocument Object ModelXMLReader )来解析HTML文档。 我会混合使用DOMSimpleXMLXPath来提取所需的内容-解析任意文档时,其他所有操作都会失败:

$dom = new DOMDocument();
$dom->loadHTML($html_content); // use DOMDocument because it can load HTML
$xml = simplexml_import_dom($dom); // switch to SimpleXML because it's easier to use.
$pTags = $xml->xpath('/html/body//p');
$tagsWithAltAttribute = $xml->xpath('/html/body//*[@alt]');
// ...

首先删除具有全部内容的脚本和样式标签,然后使用当前的清洁标签方法,您将获得文本。

首先,您可以搜索和块,并将其从html中删除。

我有很多使用此功能

        function search($start,$end,$string, $borders=true){
            $reg="!".preg_quote($start)."(.*?)".preg_quote($end)."!is";
            preg_match_all($reg,$string,$matches);

            if($borders) return $matches[0];    
            else return $matches[1];    
        }

该函数将返回数组中的匹配块。

$array = search("<script>" , "</script>" , $html)

一旦脚本和样式消失,请使用strip_tags来获取文本

只要您不能确定源是100%格式正确的XML(就其定义而言,不是HTML4),就不能进行任何形式的解析。

一个简单的preg_replace就足够了。 就像是

preg_replace('/<(script|style).*>.*<\/\1>/i', '', $html);

应该足以用空字符串替换所有脚本和样式元素及其内容(即,将它们剥离)。

但是,如果要避免XSS攻击,最好使用HTML清理器对HTML进行规范化,然后剥离所有错误代码。

我将其发布为另一篇文章的答案,但这里又是:

我们刚刚在repustate.com上启动了新的自然语言处理API。 使用REST API(因此仅使用curl即可),您可以清除任何HTML或PDF并仅取回文本部分。 我们的API是免费的,因此可以随意使用您的心脏内容。 检查一下并将结果与​​readability.js进行比较-我想您会发现它们几乎100%相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM