当前位置: 移动技术网 > IT编程>脚本编程>Python > python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题

python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题

2019年10月23日  | 移动技术网IT编程  | 我要评论

木村つな,人民币收藏最新价格,快播王欣太太

爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题。那为什么会造成这种结果呢?

其原因是由于spider的速率比较快,而scapy操作数据库操作比较慢,导致pipeline中的方法调用较慢,这样当一个变量正在处理的时候,一个新的变量过来,之前的变量的值就会被覆盖。

就比如pipline的速率是1tps,而spider的速率是5tps,那么数据库应该会有5条重复数据。

解决方案是对变量进行保存,在保存的变量进行操作,通过互斥确保变量不被修改。

下面将代码进行改造一下:

将 pipelines.py 中的 process_item 方法中的item改为深度拷贝,即

def process_item(self, item, spider):

      copy_item = copy.deepcopy(item)

      将下面的代码中item用copy_item替换

并在头部加载copy包

import copy

没有copy包的小伙伴可以在命令窗口进行下载

pip install copy

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网