【问题标题】:Python: Memory Error while using large stringsPython:使用大字符串时出现内存错误
【发布时间】:2012-07-29 07:36:08
【问题描述】:

我基本上是在设计一个网络搜索引擎,所以我设计了一个爬虫来获取网页。

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

【问题讨论】:

    标签: python string memory


    【解决方案1】:

    您的一般方法是错误的。首先,使用真正的 XML/HTML 解析器。像 BeautifulSoup 这样的东西,当涉及到糟糕的 HTML 时,它是宽容的。您查看&lt;&gt; 的方法不会持续很长时间。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2018-06-18
      • 1970-01-01
      • 2020-04-13
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多