首页 > 数据库技术 > 详细

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

时间:2019-10-23 15:24:54      阅读:87      评论:0      收藏:0      [点我收藏+]

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

其原因是由于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

 

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

原文:https://www.cnblogs.com/WebLinuxStudy/p/11726124.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!