Je veux enregistrer mes données, les éditer, puis les enregistrer à nouveau sous le même objet (c'est un dict?).scrapy comment céder à un objet existant mongodb
Je sauvegarde mes données avec yield {'Id': id, 'Name': nom, 'Age': age} en mongodb.
après que je lis les données avec le code suivant:
import scrapy
import pymongo
from pymongo import MongoClient
class example(scrapy.Spider):
name = 'example'
allowed_domains = ['example.com']
start_urls = ['https://example.com']
def __init__(self):
self.db = MongoClient()
self.datab = self.db.database_name.collection_name.find({})
def parse(self, response):
for data in self.datab:
name = data['Name']
print(name)
Le code ci-dessus imprimer tous les noms dans la base de données. mais si par exemple je veux modifier les noms comme ceci:
for data in self.datab:
name = data['Name']
if name == 'dani':
name = 'daniel'
yield{'Name':name}
je le veux céder au même objet qu'il était avant.
~~~~~~~~~~~~~~~~~~~~~~
EDIT: pipelines.py:
import pymongo
from pymongo import MongoClient
from scrapy.conf import settings
class MongoDBPipeline(object):
def __init__(self):
connection = MongoClient(settings['MONGODB_SERVER'], settings['MONGODB_PORT'])
db = connection[settings['MONGODB_DB']]
self.collection = db[settings['MONGODB_COLLECTION']]
def process_item(self, item, spider):
self.collection.insert(dict(item))
return item
settings.py:
ITEM_PIPELINES = {
'quotes_spider.pipelines.MongoDBPipeline': 300,
}
MONGODB_SERVER = 'localhost'
MONGODB_PORT = 27017
MONGODB_DB = 'database_name'
MONGODB_COLLECTION = 'collection_name'
Utilisez-vous un pipeline pour enregistrer cela? Si oui, code de pipeline également –
@Tarun Lalwani ajouté – daniel