存数据库 mongo 如何操作,在scrapy里
使用 scrapy 连接 mongo db 完成数据存储
在 Scrapy 中将数据存入 MongoDB,可以通过定义一个 Item Pipeline 来处理。这种方法可以确保爬虫和数据库操作分离,使代码更加清晰和易于维护。以下是如何在 Scrapy 中将数据存入 MongoDB 的步骤:
实现步骤
- 安装 pymongo:首先,你需要安装
pymongo
库来与 MongoDB 进行交互。
pip install pymongo
- 定义 Item:定义你要抓取的数据结构。
import scrapy
class MyItem(scrapy.Item):
title = scrapy.Field()
description = scrapy.Field()
url = scrapy.Field()
- 编写 Spider:编写你的 Spider 来抓取数据,并将数据传递给 Item Pipeline。
import scrapy
from myproject.items import MyItem
class MySpider(scrapy.Spider):
name = 'my_spider'
start_urls = ['http://example.com']
def parse(self, response):
item = MyItem()
item['title'] = response.xpath('//title/text()').get()
item['description'] = response.xpath('//meta[@name="description"]/@content').get()
item['url'] = response.url
yield item
- 编写 Item Pipeline:在 Pipeline 中实现数据存储逻辑。
from pymongo import MongoClient
class MongoDBPipeline(object):
def open_spider(self, spider):
self.client = MongoClient('localhost', 27017)
self.db = self.client['mydatabase']
self.collection = self.db['mycollection']
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
self.collection.insert_one(dict(item))
return item
- 在 settings.py 中启用 Pipeline:
ITEM_PIPELINES = {
'myproject.pipelines.MongoDBPipeline': 300,
}
通过上述步骤,你可以将数据存储逻辑独立到 Pipeline 中,使得爬虫代码更简洁、模块化、易于维护。
具体细节解释
安装 pymongo:
pymongo
是一个官方的 MongoDB 驱动程序,用于 Python 与 MongoDB 进行交互。定义 Item:定义一个 Scrapy Item 来存储抓取的数据。这里定义了
title
、description
和url
字段。编写 Spider:编写一个简单的 Spider 从网页抓取数据。抓取的数据通过
yield
语句传递给 Pipeline。编写 Item Pipeline:
- 在
open_spider
方法中,连接到 MongoDB 数据库并选择要使用的数据库和集合。 - 在
close_spider
方法中,关闭与 MongoDB 的连接。 - 在
process_item
方法中,将 Item 转换为字典并插入到 MongoDB 的集合中。
- 在
在 settings.py 中启用 Pipeline:通过在 Scrapy 项目的
settings.py
文件中启用 Pipeline,将其添加到 ITEM_PIPELINES 配置中。数字300
表示 Pipeline 的优先级,数字越低,优先级越高。
这样,你就可以使用 Scrapy 抓取数据并将其存储到 MongoDB 中。