Python:使用大字符串时的内存错误

时间:2012-07-29 07:36:09

标签: python string memory

基本上,我正在设计一个网络搜索引擎,因此我设计了一个抓取工具来获取网页。

阅读时,网页采用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的子字符串不会消耗过多的内存?

1 个答案:

答案 0 :(得分:8)

你的一般做法是错误的。首先,使用真正的XML / HTML解析器。像BeautifulSoup这样的东西,当涉及到糟糕的HTML时,这是宽容的。查看<>的方法将无法存活很长时间。

其次,你已经将整个事物读入记忆中并在那里玩它。这是内存消耗,你正在做的一些操作可能会创建副本,这也不是一件好事。相反,迭代输入流并在看到数据时对其进行处理。将remove_tags视为输入的过滤器而不是文本处理函数。