[英]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阅读器( SimpleXML
, Document Object Model
或XMLReader
)来解析HTML文档。 我会混合使用DOM
, SimpleXML
和XPath来提取所需的内容-解析任意文档时,其他所有操作都会失败:
$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.