0
我想保存我的数据,编辑它,然后再次保存为同一个对象(它是一个字典?)。scrapy如何屈服于现有物体mongodb
我用yield {'Id':id,'Name':name,'Age':age}将数据保存为mongodb。
之后,我用下面的代码读出的数据:
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)
上面的代码将打印在数据的基础上的所有名称。 但例如如果我想编辑的名字是这样的:
for data in self.datab:
name = data['Name']
if name == 'dani':
name = 'daniel'
yield{'Name':name}
我希望它是产生于同一个对象以前。
~~~~~~~~~~~~~~~~~~~~~~
编辑: 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'
您是否使用管道来保存这个?如果是这样,后置管道代码也加入 –
@Tarun Lalwani – daniel