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

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

相关推荐
cooldream20093 天前
利用 Scrapy 构建高效网页爬虫:框架解析与实战流程
爬虫·scrapy·架构
一个天蝎座 白勺 程序猿4 天前
Python爬虫(48)基于Scrapy-Redis与深度强化学习的智能分布式爬虫架构设计与实践
爬虫·python·scrapy
JHC0000004 天前
重拾Scrapy框架
scrapy
myt20006 天前
关于scrapy在pycharm中run可以运行,但是debug不行的问题
scrapy·pycharm
_一路向北_9 天前
爬虫框架:scrapy使用心得
爬虫·scrapy
一个天蝎座 白勺 程序猿12 天前
Python爬虫(32)Python爬虫高阶:动态页面处理与Scrapy+Selenium+BeautifulSoup分布式架构深度解析实战
爬虫·python·selenium·scrapy·beautifulsoup
明月清风徐徐15 天前
Scrapy爬取heima论坛所有页面内容并保存到MySQL数据库中
数据库·scrapy·mysql
一个天蝎座 白勺 程序猿19 天前
Python爬虫(30)Python爬虫高阶:Selenium+Scrapy+Playwright融合架构,攻克动态页面与高反爬场景
爬虫·python·selenium·scrapy·playwright
梦想画家21 天前
Scrapy进阶实践指南:从脚本运行到分布式爬取
分布式·scrapy·数据工程
一个天蝎座 白勺 程序猿21 天前
Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
redis·爬虫·python·selenium·scrapy·云原生·k8s