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文件中写入这些字段,如下图:

python 复制代码
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)确定爬取网站的时候,应该先研究其每一页的网址规律

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

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

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

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

python 复制代码
node_list = response.xpath('//div[@class = "info"]')

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

python 复制代码
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()

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

python 复制代码
item = {}
item['movie_name'] = movie_name
item['director'] = director
item['score'] = score
item['description'] = description

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

python 复制代码
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

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

相关推荐
吖吖耶3332 天前
【Python爬虫】Scrapy框架实战
爬虫·python·scrapy
2401_857617624 天前
Scrapy并发请求深度解析:如何高效控制爬虫速度
爬虫·scrapy
明月清风徐徐9 天前
Scrapy爬取豆瓣电影Top250排行榜
python·selenium·scrapy
aqua353574235810 天前
第二天python笔记
c语言·开发语言·python·scrapy·算法·蓝桥杯
q5673152311 天前
通过scrapy和Django登录、爬取和持久化数据
java·开发语言·数据库·scrapy·django
黑金IT13 天前
Scrapy框架:Python爬虫开发快速入门与初试
爬虫·python·scrapy
我就说好玩22 天前
使用Scrapy框架爬取博客信息
scrapy·pycharm·网络爬虫·spider
孤客网络科技工作室24 天前
深入学习 Scrapy 框架:从入门到精通的全面指南
学习·scrapy
虞书欣的61 个月前
Python小游戏14——雷霆战机
python·scrapy·游戏·pycharm·pygame
胜天半月子1 个月前
Scrapy | 通过爬取豆瓣Top250电影信息来学习在中间件中应用随机请求头和代理ip
selenium·scrapy·中间件·代理ip