zoukankan      html  css  js  c++  java
  • python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题

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

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

  • 相关阅读:
    dom4j 创建XML文件
    Convert.ToInt32()与int.Parse()的区别
    委托
    工厂模式
    策略模式
    大型网站架构演化
    字符串反转(面试)
    switch(面试)
    带宽计算
    新语法
  • 原文地址:https://www.cnblogs.com/WebLinuxStudy/p/11726124.html
Copyright © 2011-2022 走看看