我是python,django,scrapy和mongodb的新手 我想做什么? 试图将数据从scrapy持久化到通过Django创建的mongodb集合。因此,scrapy可以从该集合中读取数据并显示在页面上。
到目前为止我做了什么?
class Project(models.Model):
title = models.CharField(max_length=100)
desc = models.CharField(max_length=100)
urls = models.CharField(max_length=100)
# Generated by Django 2.2.8 on 2019-12-27 03:09
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Project',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
('desc', models.CharField(max_length=100)),
('urls', models.CharField(max_length=100)),
# ('image', models.FilePathField(path='/img')),
],
),
]
class ProjectspiderPipeline(object):
def __init__(self):
self.conn = pymongo.MongoClient('localhost', 27017)
db = self.conn['djangodb']
#self.collection = db['spiderCollection']
self.collection = db['projects_project']
def process_item(self, item, spider):
self.collection.insert(dict(item))
return item
import scrapy
class ProjectspiderItem(scrapy.Item):
_id = scrapy.Field()
title = scrapy.Field()
desc = scrapy.Field()
url = scrapy.Field()
self.collection = db['spiderCollection']
运行我的Spider时。运行成功。 self.collection = db['projects_project']
时。最终出现以下错误:error raise DuplicateKeyError(error.get("errmsg"), 11000, error)
pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection: djangodb.projects_project index: __primary_key__ dup key: { id: null }
如果有人可以指导我这两个选项中的任一个,我将不胜感激: -如何在Spider中为_id添加自动生成的值? -我们可以绕过django中自动生成的ID还是不像0001_initial.py文件中那样生成自动生成的ID来迁移?
感谢并欣赏堆堆。
答案 0 :(得分:0)
我建议不要自己生成mongodb ObjectId,而让数据库为您自动生成它。 MongoDB生成的_id将是唯一的,您还可以在保存项目后检索它。只需将对象发送到不带_id字段的数据库中,mongodb就会为您生成它。