我想將html轉換爲純文本格式。我不想僅僅去掉標籤,我想盡可能地保留儘可能多的格式。插入<br>
標籤的換行符,檢測段落並將其格式化等等。將HTML轉換爲純文本並保持結構/格式,使用ruby
輸入非常簡單,通常格式良好的html(不是整個文檔,只是一堆內容,通常沒有錨或圖像) 。
我可以將幾個正則表達式組合在一起,讓我有80%的存在,但是可能會有一些現有解決方案具有更多的智能。
我想將html轉換爲純文本格式。我不想僅僅去掉標籤,我想盡可能地保留儘可能多的格式。插入<br>
標籤的換行符,檢測段落並將其格式化等等。將HTML轉換爲純文本並保持結構/格式,使用ruby
輸入非常簡單,通常格式良好的html(不是整個文檔,只是一堆內容,通常沒有錨或圖像) 。
我可以將幾個正則表達式組合在一起,讓我有80%的存在,但是可能會有一些現有解決方案具有更多的智能。
首先,不要嘗試爲此使用正則表達式。這個可能性非常好,你會想出一個脆弱/脆弱的解決方案,它會隨着HTML的變化而中斷,否則將很難管理和維護。
你可以得到一部分的方式有很迅速地用引入nokogiri解析HTML和提取文本:
require 'nokogiri'
html = '
<html>
<body>
<p>This is
some text.</p>
<p>This is some more text.</p>
<pre>
This is
preformatted
text.
</pre>
</body>
</html>
'
doc = Nokogiri::HTML(html)
puts doc.text
>> This is
>> some text.
>> This is some more text.
>>
>> This is
>> preformatted
>> text.
這個作品被引入nokogiri將返回文本節點,它們基本上是圍繞着空白的原因標籤以及標籤中包含的文字。如果您使用tidy
進行HTML前期清理,您有時可以獲得更好的輸出結果。
問題是,當您將解析器的輸出或查看HTML的任何方式與瀏覽器顯示的內容進行比較時。瀏覽器關注的是儘可能以令人滿意的方式呈現HTML,而忽略HTML可能畸形且破碎的事實。解析器的設計目的並非如此。
您可以在提取內容之前按摩HTML以刪除多餘的分行符,如"\n"
和"\r"
,然後用換行符替換<br>
標籤。這裏有很多問題解釋如何用別的東西代替標籤。我認爲Nokogiri site也有作爲教程之一。
如果你確實想做的對,你需要弄清楚你想要爲<li>
標籤做什麼以及<ul>
和<ol>
標籤以及表格。
另一種攻擊方法是捕獲文本瀏覽器之一的輸出,如lynx。幾年前,我需要對不使用Meta-Keyword標籤的網站上的關鍵字進行文本處理,並發現了一種文本瀏覽器,可以讓我以這種方式獲取呈現的輸出。我沒有可用的源代碼,所以我無法查看它是哪一個。