爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题。那为什么会造成这种结果呢?
其原因是由于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数据保存到文本和数据库,数据少或者数据重复问题全部内容,希望文章能够帮你解决python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)