Scrapy保存项目到MongoDB:覆盖重复数据

0 投票
1 回答
664 浏览
提问于 2025-04-18 16:47

我想要检查一下在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)

撰写回答