我正在尝试用Python从一个包含大约4000个页面的网站中删除数据,每个页面包含25个链接。在
我的问题是,在处理了大约200个页面之后,性能变得如此糟糕,甚至连我电脑上的其他程序都冻结了。在
我想是因为我没有正确的记忆或者类似的东西。如果有人能帮我解决这个问题,让我的脚本运行得更流畅,对我的系统要求更低,我将不胜感激。在
提前谢谢你的帮助。:)
编辑: 我找到了答案,你可以在我给你的答案中找到,当你向下滚动一点。感谢所有帮助我的人,特别是埃特纳和沃尔特A,他们给了我很好的建议,让我走上正轨。:)
from pprint import pprint
from lxml import etree
import itertools
import requests
def function parsePageUrls(page):
return page.xpath('//span[@class="tip"]/a/@href')
def function isLastPage(page):
if not page.xpath('//a[@rel="next"]'):
return True
urls = []
for i in itertools.count(1):
content = requests.get('http://www.example.com/index.php?page=' + str(i), allow_redirects=False)
page = etree.HTML(content.text)
urls.extend(parsePageUrls(page))
if isLastPage(page):
break
pprint urls
我终于找到了解决办法。问题是我认为我使用的是字符串列表作为树.xpath,但实际上是一个_ElementUnicodeResult-Objects的列表阻止GC清除内存,因为它们包含对其父对象的引用。在
因此,解决方案是将这些ElementUnicodeResult-Objects转换成一个普通字符串,以消除引用。在
以下是帮助我理解问题的来源:http://lxml.de/api/lxml.etree._ElementTree-class.html#xpath
对于所提供的代码,以下内容将其修复:
而不是:
必须是:
^{pr2}$相关问题 更多 >
编程相关推荐