Scrapy保存项目到MongoDB:覆盖重复数据
我想要检查一下在MongoDB数据库中是否已经存在某个标题的链接(titleurl)。
如果存在的话,就覆盖掉原来的数据。请告诉我如何在Scrapy和Mongo之间筛选这个标题链接?
这是我的items.py文件:
from scrapy.contrib.djangoitem import DjangoItem
from mongo_test.models import Ct
class CtItem(DjangoItem):
django_model = Ct
这是mongo_test/models.py文件:
class Ct(models.Model):
title = models.CharField(max_length=100)
titleURL = models.URLField(max_length=255)
.....
这是pipeline.py文件:
from mongo_test.models import Ct
class CtPipeline(object):
def process_item(self, item, spider):
ct = item.save(commit=False)
ct_exist = Ct.objects.filter() #how to let scrapy titleURL= mongo titleURL
if ct_exist:
# override to mongo
ct.save()
return item
这是Django项目中的settings.py文件:
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'scrapy',
}
}
1 个回答
0
它不会保存之前通过爬虫脚本存储的重复数据
try:
find_data=list(mycol.find({
"question":data['question'],
"code_snippet":data['code_snippet']
}))
if len(find_data) == 0:
mycol.insert_one(data)
except:
find_data=list(mycol.find({"question":data['question']}))
if len(find_data) == 0:
mycol.insert_one(data)