scrapy mongodb储存(三):实战scrapy中文网存入mongodb

时间:2018-01-31 12:30:48作者:scrapy中文网阅读:

scrapy教程,我们给小伙伴介绍一个scrapy存入mongodb的实例。其实scrapy存入mongodb,原理和存入mysql或是其他数据库大同小异,最主要就是scrapy item pipeline的编写,说白了也就是你要存入mysql你就编写一个操作mysql数据库的pipeline组件,你要存入mongodb也是编写一个操作mongodb的pipeline组件,那编写这么一个组件并非按我们想法来编写,需要继承scrapy给我实现的一些pipeline方法方法,必须继承的就是:
process_item(self, item, spider)
至于pipline具体编写方法,我们在《scrapy item pipeline组件实现细节》已详细介绍过,不熟悉的小伙伴可以去看看。接下来的scrapy教程,我们来看看如何存入mongodb。还是先来看一下机子环境:

win7(64) / scrapy 1.4 / mongodb3.4 / pymongo-3.6.0

再来看一下我们要爬取的数据,也还是用http://lab.scrapyd.cn来练手,爬取所有文章并保存两个字段:名言、标签
scrapy存入mongodb
好了,接下来我们来分解详细步骤:

一、MongoDB安装

请查看《mongodb安装设置

二、Python MongoDB驱动安装

python mongodb驱动安装方式灰常简单,使用pip:
pip install pymongo
好了就这样,跑完就装好了。

三、创建蜘蛛项目

这个过程已经重复多次了,希望小伙伴没忘记命令:
scrapy startproject InputMongodb
四、要爬取的字段:Item定义
class InputmongodbItem(scrapy.Item):
    tag = scrapy.Field()  # 标签字段
    cont = scrapy.Field()  # 名言内容
    pass
五、编写蜘蛛:
# -*- coding: utf-8 -*-
import scrapy
from InputMongodb.items import InputmongodbItem

class IntomongodbspiderSpider(scrapy.Spider):

    name = "IntoMongodbSpider"
    allowed_domains = ["lab.scrapyd.cn"]
    start_urls = ['http://lab.scrapyd.cn/']

    def parse(self, response):
        mingyan = response.css('div.quote')

        item = InputmongodbItem()  # 实例化item类

        for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签
            item['cont'] = v.css('.text::text').extract_first()
            # 提取名言
            tags = v.css('.tags .tag::text').extract()
            # 数组转换为字符串
            item['tag'] = ','.join(tags)
            # 把取到的数据提交给pipline处理
            yield item
        # css选择器提取下一页链接
        next_page = response.css('li.next a::attr(href)').extract_first()
        # 判断是否存在下一页
        if next_page is not None:
            next_page = response.urljoin(next_page)
            # 提交给parse继续抓取下一页
            yield scrapy.Request(next_page, callback=self.parse)
六、创建Pipeline
import pymongo
class InputmongodbPipeline(object):

    def __init__(self):
        # 建立MongoDB数据库连接
        client = pymongo.MongoClient('127.0.0.1', 27017)
        # 连接所需数据库,ScrapyChina为数据库名
        db = client['ScrapyChina']
        # 连接所用集合,也就是我们通常所说的表,mingyan为表名
        self.post = db['mingyan']

    def process_item(self, item, spider):
        postItem = dict(item)  # 把item转化成字典形式
        self.post.insert(postItem)  # 向数据库插入一条记录
        return item  # 会在控制台输出原item数据,可以选择不写

七、设置:
ITEM_PIPELINES = {
   'InputMongodb.inputMongodbPipeline.InputmongodbPipeline': 300,
}
八、运行
scrapy crawl IntoMongodbSpider
运行之前请开启mongodb服务,运行完毕之后,打开mongodb插件,若不清楚如何安装,可以访问《pycharm mongodb可视化插件安装》,你会发现,已经成功爬取到我们想要的数据:
scrapy爬取数据存入mongodb
结语:

其实scrapy存入mongodb比起存入mysql要简单得多(文:《实战scrapy存入mysql》),因为我们不用创建表,只需在程序里面创建相应库名、表名即可,纵观以上代码可以看到scrapy的内容并不多,多的是数据库的操作,所以我们需要多学勤练,多掌握一技之长,在以后工作生活中才能行云流水般流畅。

源码地址:Github

相关文章