2012-07-29 41 views
-1

基本上,我設計了一個Web搜索引擎,所以我設計了一個爬蟲來獲取網頁。Python:使用大字符串時的內存錯誤

閱讀時,網頁是html格式,所以所有的標籤都在那裏。我需要從正文和標題中提取關鍵字,因此我試圖刪除所有標記('<'和'>'之間的任何內容)。

以下代碼適用於小型html頁面,但當我嘗試爲了大規模使用這個(即從http://www.google.com開始),我用完了內存。

0 def remove_tags(self, s): 
1  while '<' in s: 
2   start = s.index('<') 
3   end = s.index('>') 
4   s = s[:start] + " " + s[end+1:] 
5  return s.split() 

內存錯誤發生在第4行。如何修復我的代碼,以便獲取s的子字符串不會消耗過多內存?

+0

哦,那個人很醜。 – 2012-07-29 09:14:46

回答

8

您的一般做法是錯誤的。首先,使用真正的XML/HTML解析器。就像BeautifulSoup一樣,當涉及到錯誤的HTML時,它是寬容的。你看着<>的方法將不會存活很長時間。

其次,你已經把所有東西都讀到了記憶中,並在那裏玩。這是內存消耗和你正在做的一些操作可能會創建副本,這也不是一件好事。相反,迭代輸入流並在看到數據時處理它。將remove_tags視爲輸入上的過濾器,而不是文本處理函數。

相關問題