Scrapy – это мощная платформа для очистки веб-страниц, написанная на Python и широко используемая для извлечения данных с веб-сайтов. По умолчанию Scrapy хранит очищенные данные в различных форматах, таких как CSV или JSON. Однако, если вы хотите использовать возможности MongoDB, популярной базы данных NoSQL, вы можете легко интегрировать ее в свои конвейеры Scrapy. В этой статье мы рассмотрим различные методы редактирования конвейеров Scrapy и settings.py, чтобы обеспечить плавную интеграцию с MongoDB. Мы предоставим примеры кода для иллюстрации каждого метода.
Метод 1. Использование pymongo для вставки данных в MongoDB
Во-первых, убедитесь, что у вас установлена библиотека pymongo. Затем добавьте следующий код в файл конвейера Scrapy (обычно Pipes.py):
import pymongo
class MongoDBPipeline(object):
collection_name = 'your_collection_name'
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
@classmethod
def from_crawler(cls, crawler):
return cls(
mongo_uri=crawler.settings.get('MONGO_URI'),
mongo_db=crawler.settings.get('MONGO_DATABASE', 'items')
)
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.db[self.collection_name].insert_one(dict(item))
return item
В файл settings.py добавьте следующие строки:
ITEM_PIPELINES = {
'your_project_name.pipelines.MongoDBPipeline': 300,
}
MONGO_URI = 'mongodb://localhost:27017'
MONGO_DATABASE = 'your_database_name'
Замените «имя_вашей_коллекции», «имя_вашего_проекта», «имя_вашей_базы_данных» и «mongodb://localhost:27017» на свои конкретные значения.
Метод 2: использование ORM MongoEngine
MongoEngine — это средство сопоставления объектов и документов (ODM), которое обеспечивает абстракцию высокого уровня для работы с MongoDB. Чтобы использовать MongoEngine со Scrapy, выполните следующие шаги:
- Установить библиотеку mongoengine:
pip install mongoengine
- В файл Pipelines.py добавьте следующий код:
from mongoengine import connect, Document, StringField
class Item(Document):
title = StringField()
content = StringField()
class MongoDBPipeline(object):
def __init__(self):
connect('your_database_name')
def process_item(self, item, spider):
item = Item(title=item['title'], content=item['content'])
item.save()
return item
В файле settings.py добавьте следующую строку:
ITEM_PIPELINES = {
'your_project_name.pipelines.MongoDBPipeline': 300,
}
Замените «имя_вашего_проекта» и «имя_вашей_базы_данных» на свои конкретные значения.
Метод 3: использование Motor для асинхронных операций
Если вы предпочитаете работать с асинхронным кодом, вы можете использовать Motor, который является асинхронным драйвером для MongoDB. Чтобы интегрировать Motor с Scrapy, выполните следующие действия:
- Установите библиотеку двигателей:
pip install motor
- В файл Pipelines.py добавьте следующий код:
import motor.motor_asyncio
class MongoDBPipeline(object):
def __init__(self):
self.client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017')
self.db = self.client['your_database_name']
async def process_item(self, item, spider):
await self.db['your_collection_name'].insert_one(dict(item))
return item
В файле settings.py добавьте следующую строку:
ITEM_PIPELINES = {
'your_project_name.pipelines.MongoDBPipeline': 300,
}
Замените «имя_вашей_базы_данных», «имя_вашей_коллекции» и «имя_вашего_проекта» на свои конкретные значения.
В этой статье мы рассмотрели различные методы редактирования конвейеров Scrapy и файла settings.py для беспрепятственной интеграции MongoDB. Мы обсуждали использование библиотек pymongo, MongoEngine и Motor для достижения этой интеграции. Следуя предоставленным примерам кода, вы можете легко хранить очищенные данные в базе данных MongoDB, обеспечивая эффективный поиск и анализ. Интеграция MongoDB со Scrapy открывает широкий спектр возможностей для управления и использования очищенных данных.