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

摘要:
爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题。其原因是由于Spider的速率比较快,而scapy操作数据库操作比较慢,导致pipeline中的方法调用较慢,这样当一个变量正在处理的时候,一个新的变量过来,之前的变量的值就会被覆盖。就比如pipline的速率是1TPS,而spider的速率是5TPS,那么数据库应该会有5条重复数据。

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

其原因是由于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数据保存到文本和数据库,数据少或者数据重复问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【一】、.net core 3.1 创建windows服务并集成Serilog的步骤记录延时器 清除延时器下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Sqlite数据库完整性检测

/************************************************************************************************* * 函数名称: IntegrityCheck * 功能描述: 数据库完整性检测 * 输入参数: 无 * 输出参数: 无 * 返 回 值: 0:完整...

Velocity模板引擎笔记

模板引擎中判断对象是否为空:  #if(!${jsonObj.data.buyerName} || ${jsonObj.data.buyerName} == '')         <p>采购商名称:$!jsonObj.data.buyerCompanyName</p>  #else         <p>采购商名称:$...

[转] 函数调用栈

http://kingj.iteye.com/blog/1555017 http://www.cnblogs.com/rain-lei/p/3622057.html   函数调用大家都不陌生,调用者向被调用者传递一些参数,然后执行被调用者的代码,最后被调用者向调用者返回结果,还有大家比较熟悉的一句话,就是函数调用是在栈上发生的,那么在计算机内部到底是如何实...

由SpringMVC中RequetContextListener说起

零、引言 RequetContextListener从名字结尾Listener来看就知道属于监听器。 所谓监听器就是监听某种动作,在其开始(初始化)和结束(销毁)的时候进行某些操作。 由此可以猜测:该类用于在RequetContext(请求上下文对象)创建和销毁的时候进行某些操作(哪些操作?结尾总结!) 一、web.xml配置要使用该listener对象...

PostgreSQL在Linux上的RPM和源码安装

第一章 引言 此文档主要描述Postgre数据库,基于Red Hat Enterprise Linux Server release 6.5 的操作系统上安装Postgre数据库的文档衍生而来。此文档包括Postgre数据库的多种安装方式。 1.1 背景 本文档介绍Postgre 数据库基于linux 6.5平台的三种安装方式。 第二章 部署前规划...

Delphi连接Oracle控件ODAC的安装及使用

Delphi ODAC 控件下载 ODAC 64位客户端 12.1.0.2.4 http://down-ww3.7down.net/pcdown/soft/xiazai/odac-x64.rar Delphi连接Oracle有很多种方式,但大多要在客户机上安装Oracle那庞大的客户端,比较不方便,使用ODAC控件连接Oracle则免去了这些麻烦。ODAC...