我正在构建一个需要爬取超过 500 万个 url 的爬虫。目前我正在使用以下方式将文件中的所有 url 加载到 start_urls 列表中,我发现它占用了太多内存。
self.start_urls = get_list_from_file(file_path)
所以我想知道是否有一种方法可以将网址一个一个地加载到内存中,这样我就可以保持较低的内存成本。
我正在构建一个需要爬取超过 500 万个 url 的爬虫。目前我正在使用以下方式将文件中的所有 url 加载到 start_urls 列表中,我发现它占用了太多内存。
self.start_urls = get_list_from_file(file_path)
所以我想知道是否有一种方法可以将网址一个一个地加载到内存中,这样我就可以保持较低的内存成本。
当然,在蜘蛛上使用start_requests方法。例如:
def start_requests(self):
reader = csv.reader(open('urls.csv'))
for row in reader:
url = row[0]
yield Request(url=url)
另外,让你的get_list_from_file
函数作为生成器工作是个好主意。
希望有帮助。