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

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

相关推荐
B站计算机毕业设计超人4 天前
计算机毕业设计PySpark+Django深度学习游戏推荐系统 游戏可视化 游戏数据分析 游戏爬虫 Scrapy 机器学习 人工智能 大数据毕设
爬虫·深度学习·scrapy·django·课程设计·数据可视化·推荐算法
B站计算机毕业设计超人5 天前
计算机毕业设计Python电影评论情感分析 电影可视化 豆瓣电影爬虫 电影推荐系统 电影数据分析 电影大数据 大数据毕业设计 机器学习 深度学习 知识图谱
大数据·爬虫·python·深度学习·scrapy·机器学习·数据可视化
晓时谷雨8 天前
python scrapy爬虫框架 抓取BOSS直聘平台 数据可视化统计分析
爬虫·python·scrapy·pandas·数据可视化
天启代理ip10 天前
Scrapy添加代理IP池:自动化爬虫的秘密武器
tcp/ip·scrapy·自动化
金灰16 天前
scrapy--子类CrawlSpider&中间件
开发语言·网络·python·scrapy·安全·中间件
天涯幺妹16 天前
Python网络爬虫模拟登录与验证解析
爬虫·python·scrapy·网络安全·pycharm·beautifulsoup·pygame
github_czy17 天前
scrapy学习笔记0828-上
笔记·学习·scrapy
天涯幺妹19 天前
Python爬虫框架Scrapy应用实战解析
vscode·爬虫·python·scrapy·正则表达式·pycharm·django
IT毕设梦工厂22 天前
计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法
python·scrapy·随机森林·django·毕业设计·课程设计·数据可视化
IT毕设梦工厂22 天前
计算机毕业设计选题推荐-旅游景点数据分析-Python爬虫可视化
python·scrapy·数据分析·毕业设计·源码·课程设计·数据可视化