爬虫系列(二十六):爬取豆瓣电影TOP250用Pymongo保存数据

爬取豆瓣电影top250movie.douban.com/top250的电影数据,并保存在MongoDB中。

items.py

    class DoubanspiderItem(scrapy.Item):
        # 电影标题
        title = scrapy.Field()
        # 电影评分
        score = scrapy.Field()
        # 电影信息
        content = scrapy.Field()
        # 简介
        info = scrapy.Field()

spiders/douban.py

    import scrapy
    from doubanSpider.items import DoubanspiderItem


    class DoubanSpider(scrapy.Spider):
        name = "douban"
        allowed_domains = ["movie.douban.com"]
        start = 0
        url = 'https://movie.douban.com/top250?start='
        end = '&filter='
        start_urls = [url + str(start) + end]

        def parse(self, response):

            item = DoubanspiderItem()

            movies = response.xpath("//div[@class=\'info\']")

            for each in movies:
                title = each.xpath('div[@class="hd"]/a/span[@class="title"]/text()').extract()
                content = each.xpath('div[@class="bd"]/p/text()').extract()
                score = each.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()
                info = each.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()

                item['title'] = title[0]
                # 以;作为分隔,将content列表里所有元素合并成一个新的字符串
                item['content'] = ';'.join(content)
                item['score'] = score[0]
                item['info'] = info[0]
                # 提交item

                yield item

            if self.start <= 225:
                self.start += 25
                yield scrapy.Request(self.url + str(self.start) + self.end, callback=self.parse)

pipelines.py

    from scrapy.conf import settings
    import pymongo

    class DoubanspiderPipeline(object):
        def __init__(self):
            # 获取setting主机名、端口号和数据库名
            host = settings['MONGODB_HOST']
            port = settings['MONGODB_PORT']
            dbname = settings['MONGODB_DBNAME']

            # pymongo.MongoClient(host, port) 创建MongoDB链接
            client = pymongo.MongoClient(host=host,port=port)

            # 指向指定的数据库
            mdb = client[dbname]
            # 获取数据库里存放数据的表名
            self.post = mdb[settings['MONGODB_DOCNAME']]


        def process_item(self, item, spider):
            data = dict(item)
            # 向指定的表里添加数据
            self.post.insert(data)
            return item

settings.py

    BOT_NAME = 'doubanSpider'

    SPIDER_MODULES = ['doubanSpider.spiders']
    NEWSPIDER_MODULE = 'doubanSpider.spiders'

    ITEM_PIPELINES = {
            'doubanSpider.pipelines.DoubanspiderPipeline' : 300
            }

    # Crawl responsibly by identifying yourself (and your website) on the user-agent
    USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'

    # MONGODB 主机环回地址127.0.0.1
    MONGODB_HOST = '127.0.0.1'
    # 端口号,默认是27017
    MONGODB_PORT = 27017
    # 设置数据库名称
    MONGODB_DBNAME = 'DouBan'
    # 存放本次数据的表名称
    MONGODB_DOCNAME = 'DouBanMovies'

运行

    启动MongoDB数据库需要两个命令:

    mongod:是mongoDB数据库进程本身
    mongo:是命令行shell客户端


    sudo mongod # 首先启动数据库服务,再执行Scrapy
    sudo mongo # 启动数据库shell

    在mongo shell下使用命令:

    # 查看当前数据库
    > db

    # 列出所有的数据库
    > show dbs

    # 连接DouBan数据库
    > use DouBan

    # 列出所有表
    > show collections

    # 查看表里的数据
    > db.DouBanMoives.find()
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这两天摸索了下scrapy,刚看文档的时候觉得有点生无可恋,scrapy框架个人还是觉得比较难懂的,需要学习的地方...
    Treehl阅读 5,703评论 7 10
  • 学习python时,爬虫是一种简单上手的方式,应该也是一个必经阶段。本项目用Scrapy框架实现了抓取豆瓣top2...
    豌豆花下猫阅读 1,173评论 0 6
  • scrapy爬取豆瓣电影,存储在MongoDB 本节分享用的Scrapy爬取豆瓣电影Top250的实战。 本节要实...
    小明与小明阅读 1,631评论 0 1
  • 前言(目的) 本文为scrapy爬虫的入门文章,作者尽量将自己刚开始学习所遇到的问题都还原出来,过程尽量写得详细详...
    高正杰阅读 6,538评论 5 5
  • 庭院围栏里, 一抹新芽吐绿。 北风徐徐, 梅枝摇曳。 矜持的花蕊, 是冬的信使。 于是, 雪花便扬扬洒洒, 如期而...
    良之成阅读 312评论 0 0