2010-08-19 111 views
2

我想使用Python從HTML文件中提取文本。如果我從瀏覽器複製文本並將其粘貼到記事本中,我基本上需要獲得相同的輸出。html轉換爲使用python語言進行文本轉換

我想要一些比使用正則表達式更強大的東西,而這些正則表達式可能會在形成不良的HTML時失敗。我見過很多人推薦美麗的湯,但我使用它有一些問題。首先,它收集了不需要的文本,例如JavaScript源代碼。另外,它沒有解釋HTML實體。例如,我希望HTML源代碼中的'可以轉換爲文本中的撇號,就像我將瀏覽器內容粘貼到記事本一樣。

更新:html2text看起來很有希望。它正確處理HTML實體並忽略JavaScript。但是,它並不完全產生純文本;它產生降價,然後不得不變成純文本。它沒有任何示例或文檔,但代碼看起來很乾淨。

+0

如果只有生活如此簡單......你知道HTML是如何工作的嗎?您是否已經在例如記事本? – katrielalex 2010-08-19 13:08:41

+0

問題更新請看看......... – 2010-08-19 13:12:15

+0

沒有什麼魔法工具可以刪除所有東西。所有的網頁將被加載東西。更好地抓住它,然後替換撇號並刪除JavaScript。 – JiminyCricket 2010-08-19 13:17:07

回答

6

您需要使用urllib2 python library從網站獲取html,然後通過html解析以獲取所需的文本。

使用BeautifulSoup通過HTML

import BeautifulSoup 
resp = urllib2.urlopen("http://stackoverflow.com") 
rawhtml = resp.read() 
#parse through html to get text 
soup=BeautifulSoup(rawhtml) 
+1

這也是我會推薦的方法。 – 2010-08-19 13:18:09

+0

謝謝你給我的幫助很大 – 2010-08-19 13:34:23

1

解析我不知道「從瀏覽器中複製 - 粘貼」是一個定義良好的操作。例如,如果整個頁面被透明的浮動覆蓋div會發生什麼?如果它有桌子呢?動態內容呢?

BeautifulSoup是一個功能強大的解析器;您只需要知道如何使用它(例如,從頁面中刪除script標籤很容易)。幸運的是,它有很多documentation

您可以使用xml.sax.utils.unescape來隱藏HTML實體。

+0

爲什麼downvote? OP從未說過他想從網絡上獲取該頁面! 「HTML文件」意味着它是本地的。 – katrielalex 2010-08-19 14:24:29