scrapy框架爬取豆瓣top250电影排行榜(上)

程序说明

一.功能介绍

电影已经成为当今社会人情世故的载体,为了了解当今社会中人民普遍更喜欢哪些电影,本程序旨在用爬虫爬取数据后,经过数据清洗,放入MySQL中,再通过一些数据分析方法,得到我们想要的结果。

本程序选取的网站是豆瓣,因为权威,而且该网站目前比较受欢迎、资源丰富,可信度高,最重要的是,所需的网址规律易于寻找,用来当例子再适合不过。

此外,还做了数据可视化处理。使用json、pandas、matplotlib、wordcloud、jieba这些库做出柱状图和词云图,这些都可以帮助我们分析处哪些电影更受欢迎。

二.程序介绍

(我使用的是pycharm编辑器)

(一)scrapy框架的使用

(1)首先,打开编辑器,新建项目。

建出来是这个样子的。

没有venv这玩意儿,项目和虚拟环境岂能混为一谈。这一步就错的人得好好反省。主要是我在期末周改过的代码中,好多代码都是第一步就错了,给我整的。 

(2)先在pycharm编辑器中下载scrapy库

我介绍两种方法

  • File  -- > settings  -- > Project  -- > Python interpreter

然后Package上面有一个加号,点进去,然后找个网络好点的地方, 输入库名scrapy,再点install就ok了。

  • 第二种,点最下方的Terminal

就是这个样子。

输入pip install scrapy ,当然也可以加镜像源,那样更快一点,最重要的还是找个网络好一点的地方。

(3)在Terminal中进行以下操作

第一,输入scrapy进入其中,看看有哪些操作,不出意外是这样:

第二,scrapy startproject + 工程名来创建我们的工程,如图:

第三,它都提醒你了,返回上一级,如图:

当然了,这里也可以写cd..      这样更方便,还不用记工程名是啥。

第四,打开我们的网站,复制一下网址。

因为我们要用scrapy genspider  + 项目名 + 网址

然后,我们不是要运行它嘛,用的是scrapy crawl  + 项目名

至此,创建工作完成。

(4)在工程项目下创建一个main.py文件,写入调试语句,此文件为调试文件。

(5)此时scrapy框架中已经创建好了一个以“工程名”命名的主程序文件,在此处进行数据爬取。

要是没错,应该是这样的。(这张图是我从自己的另一篇文章里面复制过来的)

(6)在settings.py文件中取消对优先级的注释,再将robots协议中的True改为False

 

(7)在pipelines.py文件中进行数据存储。 


(二)确定爬取的信息

本程序爬取的字段是电影名称、导演、评分、简介。

在items.py文件中写入这些字段,如下图:

import scrapy


class DoubanItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    movie_name = scrapy.Field()
    director = scrapy.Field()
    score = scrapy.Field()
    desc = scrapy.Field()

(三)爬虫文件的编写

(1)确定爬取网站的时候,应该先研究其每一页的网址规律

由此图可以看出,该网站每一页的网址的规律仅仅是数字在变化,所以可以得出其网址规律:

page_url = "https://movie.douban.com/top250?start={}&filter=".format(page_num * 25)

(2)先爬取包含电影名字、导演、评分、简介的总资源,这里提取数据用的是xpath方法

 经过“检查”并“选择”,可以写出以下代码:

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

接下来用for循环语句从node_list中逐个提取出我们想要的信息。

for node in node_list:
    movie_name = node.xpath('.//div[@class = "hd"]/a/span/text()').get()
    director = node.xpath('.//div[@class = "bd"]/p/text()').get().strip()
    score = node.xpath('.//span[@class = "rating_num"]/text()').get()
    description = node.xpath('.//p[@class = "quote"]/span/text()').get()

之后,将其存储在字典中。

item = {}
item['movie_name'] = movie_name
item['director'] = director
item['score'] = score
item['description'] = description

然后使用生成器关键字yield对获取的小说网址进行访问,可以来个控制爬取页数的操作。

yield item
            page_num += 1
            if page_num <= 2:
                page_url = "https://movie.douban.com/top250?start={}&filter=".format(page_num * 25)
                yield scrapy.Request(page_url,callback=self.parse)
            else:
                return

 我分成两部分写,有点多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值