解决python的scrapy爬虫时Memory error问题
用pycharm运行scrapy爬虫代码时竟然出现Memory error错误,比较之后发现是并发任务过多导致内存不够用,这时候去调整setting文件夹中的CONCURRENT_REQUESTS_PER_DOMAIN = 16是不管用的。所以需要重写并发代码部分;
具体问题代码如下:
next_pages = sel.xpath('//*[@id="list"]/div[1]/div[3]/div[3]/span/a/@href').extract()
for next_page in next_pages:
next_page_r = 'https:' + str(next_page)
next_pages.append(next_page_t)
if len(next_pages) != 0:
yield Request(next_pages[0], callback=self.parse)
解决办法是:
逐行读取
如果用上面代码来读取下一页的链接的话,会一次性把所有链接都读到内存里来,导致内存爆掉,那么应该是一行一行地读它:
next_pages = sel.xpath('//*[@id="list"]/div[1]/div[3]/div[3]/span/a/@href').extract()
for next_page in next_pages:
next_page = 'https:' + str(next_page)
if next_page:
yield scrapy.Request(next_page, callback=self.parse)
即:每用for循环一次就将进行一次yield返回一次,这样就可以进行一行行的进行返回,不会导致内存爆掉;