[英]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.