scrapy + mongodb爬取电影TOP250

无聊想看电影,今天上豆瓣看了一下,顺便爬了点豆瓣电影top250的榜单,并将数据存储到了mongodb中。
用到了scrapy + windows + mongodb
难点基本没有,也没遇到坑,就是存到mongodb数据库的时候有几步忘了,查了一下,看来要多用数据库才行。
废话不多说,直接贴代码。
平时遇到的坑昨天那篇博客已经说了,今天特别注意,有时候问题虽小,但是报错也很烦恼 = =…

爬虫代码
doubanmovies.py

# -*- coding: utf-8 -*-
import scrapy
from douban.items import DoubanItem


class DoubanmoviesSpider(scrapy.Spider):
    name = 'doubanmovies'
    allowed_domains = ['movie.douban.com']
    offset = 0
    url = 'https://movie.douban.com/top250?start='
    start_urls = [url + str(offset)]

    def parse(self, response):
        # 观察网页结构,可以以info为根节点,(其他根节点也可以,如上一个根节点class='item'),这样做是为了可以构造循环,实现迭代
        for each in response.xpath('//div[@class ="info"]'):
            item = DoubanItem()
            #老方法,以上面的规则为根节点,xpath走起
            item['title'] = each.xpath(
                './/span[1][@class="title"]/text()').extract_first()
            item['bd'] = each.xpath('.//div[@class="bd"]/p/text()').extract_first()
            item['star'] = each.xpath(
            #如果有多个span标签并列,取序号大于1的所有span标签内容。序号是从1开始递增,索引是从0开始递增
                './/div[@class="star"]/span[position()>1]/text()').extract_first()
            item['quote'] = each.xpath(
                './/p[@class ="quote"]/span/text()').extract_first()
            yield item
        if self.offset < 225:
            # 每次自增量由网页结构决定
            self.offset += 25
            yield scrapy.Request(self.url + str(self.offset), callback=self.parse)

items.py


import scrapy


class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    #标题
    title = scrapy.Field()
    #电影主演等信息
    bd = scrapy.Field()
    #评分
    star = scrapy.Field()
    #短评
    quote = scrapy.Field()

pipeline.py文件里用到了mongodb数据库的连接方式,同时也需要在settings.py中设置
pipelines.py

import pymongo

#导入scrapy中所有settings.py中的设置,固定方法
from scrapy.conf import settings


class DoubanPipeline(object):
    def __init__(self):
    #以下也算是固定用法,多用熟练即可,没有难度
        # 数据库连接地址
        host = settings['MONGODB_HOST']
        # 数据库连接端口号
        port = settings['MONGODB_PORT']
        # 数据库连接名字
        dbname = settings['MONGODB_DBNAME']
        # 数据库表名字
        sheetname = settings['MONGODB_SHEETNAME']

        # 创建mongodb的数据库连接
        client = pymongo.MongoClient(host=host, port=port)

        # 指定数据库
        mydb = client[dbname]
        # 把数据插入到指定的表里面
        self.post = mydb[sheetname]

    def process_item(self, item, spider):
        #返回的item数据是一种类似于字典类型的数据,强转为字典类型
        data = dict(item)
        # 插入到数据库
        self.post.insert(data)
        return item

在settings.py中插入这几行代码即可连接mongodb数据库

# MONGO主机名
MONGODB_HOST = '127.0.0.1'
# MONGO端口号
MONGODB_PORT = 27017
# 数据库名称
MONGODB_DBNAME = 'Douban'
# 存放数据的表名称,这里设置后,插入的时候会自动创建
MONGODB_SHEETNAME = 'doubanmovies'
如果数据要保存到本地,可用:
	scrapy crawl doubanmovies -o douban.csv
	或者
	scrapy crawl doubanmovies -o douban.json
	即可保存到本地

爬取完成,250条:

在这里插入图片描述

爬取的内容:
在这里插入图片描述

存在mongodb数据库中:
在这里插入图片描述

看了爬取的内容,发现有很多换行符’\n’和空行,存入数据库之前,可以用字符串的方法str.replace()处理掉,就不一一赘述了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值