给定一个包含几千个URL的电子表格,我将遍历它们,并为每个URL实例化一个Page()
类,然后调用两个方法,第一个获取页面,第二个使用lxml
解析。(根据我的经验,urllib2
&lxml
很快就完成了他们的东西,这就是为什么我认为我不需要使用多线程,反正我没有经验):
class Page(object):
"""Representation of any page to be scraped"""
def __init__(self, url):
self.url = url
def fetch(self):
""" Fetch the URL. Return raw (text) source."""
self.source = # do urllib stuff
def parse(self):
""" Extract page elements with lxml """
我对 Python 中的内存管理知之甚少。是否有必要或谨慎地进行以下任何操作?
- 在
- 我完成其方法后在 Page 对象上调用
del
- 雇用上下文管理器 (
with Page(url) as page:
) - 最小化资源使用的任何其他技术
@ferdy的答案基本上是正确的。但一般来说,只有当你使用大量内存时,你才需要管理内存。
据我了解,您将实例化一个页面,获取内容,在它们上调用 page.parse(),然后......什么?
如果您不保存网址,也不保存页面内容,则 Python GC 将根据需要回收内容。
如果您引用page
对象中的内容,并且还引用了其他数据结构中的内容,则世界上所有del
调用都无济于事,因为内容将比通过释放 URL 获得的任何少量内存大得多。
简短的回答:在它成为问题之前不要担心这个问题,然后在SO上创建一个新帖子并描述您最终遇到的实际问题。
从您所揭示的内容来看,一次又一次地重用一个 Page 对象就足够了,因为您提到过,您希望按顺序遍历所有页面。