Je veux éviter d'ajouter des données en double et juste 1) mettre à jour un champ (nombre de vues) ou 2) tous les champs qui avaient changé dans le site Web. Pour ce faire, j'utilise un identifiant (origin_id) que j'ai trouvé sur le site que je suis en train de gratter.Comment éviter d'ajouter des données en double dans Scrapy en utilisant MongoDB?
Pipelines
class MongoDBPipeline(object):
def __init__(self):
connection = pymongo.MongoClient(
settings['MONGODB_SERVER'],
settings['MONGODB_PORT']
)
db = connection[settings['MONGODB_DB']]
self.collection = db[settings['MONGODB_COLLECTION']]
def process_item(self, item, spider):
valid = True
for data in item:
if not data:
valid = False
raise DropItem("Missing {0}!".format(data))
if valid:
# Update item if it is in the database and insert otherwise.
self.collection.update({'origin_id': item['origin_id']}, dict(item), upsert=True)
return item
MongoDB enregistrement
{
"_id" : ObjectId("59725e919a1a6b7f0350027a"),
"origin_id" : "12256699",
"views":"556",
"url":"...",
"title":"...",
}
S'il vous plaît laissez-moi savoir si vous voulez plus de détails ...
Alors, quel est le problème? Ce sont des "upserts". Par nature, il met à jour les données existantes en fonction des informations contenues dans la requête ou "crée" lorsque cette requête n'aboutit à rien. Donc, ce n'est vraiment pas clair quel est votre problème. Si un problème du tout. –
Par exemple le nombre de vues où il n'est pas mis à jour –
Tout ce que vous faites est d'envoyer le résultat de 'dict (item)' et d'écraser tout ce qui a été trouvé. Qu'attendez-vous? Qu'est-ce que cela a à voir avec les doublons? Si vous venez ici pour poser des questions, vous devez être «très spécifique» et montrer un résultat attendu et permettre aux gens de se reproduire. Voir [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) –