簡體   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