-1

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

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

4

1 回答 1

8

你的一般方法是错误的。首先,使用真正的 XML/HTML 解析器。像 BeautifulSoup 这样的东西,当涉及到糟糕的 HTML 时,它是宽容的。<你的观察方法>不会持续很长时间。

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

于 2012-07-29T07:45:38.113 回答