美文网首页
Python 爬虫豆瓣电影

Python 爬虫豆瓣电影

作者: feng_zhenrong | 来源:发表于2020-04-28 00:40 被阅读0次

项目简介

在这个项目中, 你将会学习到如何从豆瓣电影的网页中获取你喜欢的类别,收集各个地区的高评分电影,收集他们的名称、评分、电影页面的链接和电影海报的链接;

备注:原本是项目是打算通过使用库 requests get 函数获取豆瓣电影列表页面信息,但是有些列表需要多页显示,我们需要不断模拟点击加载更多按钮来显示这个列表上的全部电影,所以使用了selenium自动化测试工具来获取html页面内容,如果你不懂怎么安装安装 selenium 和 chromedriver,你可以参考这份指南

运行环境

Python3.7

Chrome浏览器

依赖库

selenium webdriver

bs4 BeautifulSoup

urllib

os

pandas

第一步:观察豆瓣电影列表页面HTML结构

首页我们在Chrome浏览器打开豆瓣电影列表页面URL链接https://movie.douban.com/tag/#/?sort=S),然后按下键盘的F12键打开开发者调试工具,可以查看html元素结构,页面如下:(如果你习惯用其他浏览器也可以用其他浏览器)

在页面中可以看出,选影视下面有几大类别的刷选功能,形式,类型,地区,年代,特色等,在这里可以选择你喜欢类别的电影,这里我就选择类型跟地区这两类;将鼠标移动到对应页面元素上,即可在页面上找到相应的内容;可以看出,类别都分别在class为category的标签列表上;

下面来看看某个电影信息的内容;

从上图可以看出,电影列表是在class=“list-wp”的div标签下,对应的每个电影是在<a>标签里面;在<a>标签里可以看到;电影名称在class为title的标签里,电影评分在class为rate的标签里,电影url链接直接在a标签的herf获取,电影图片地址在img标签里;如果你想查看更多标签内容信息,可以将鼠标移动到对应页面元素上,即可在页面上找到相应的内容。

第二步:定义需要从页面获取信息

在此项目我只想获取电影的信息,所以,在全部形式刷选中,选择电影;

定义电影类应该包含以下成员变量

电影名称

电影评分

电影类型

电影地区

电影页面链接

电影海报图片链接

比如,就以电影《张国荣热·情演唱会》我们可以定义以下信息:

name = “张国荣热·情演唱会”     #电影名称

rate = 9.8                                   #电影评分

location = "中国大陆"                 #电影地区

category = "歌舞"                      #电影类型

info_link = "https://movie.douban.com/subject/1292052/"  #页面链接

cover_link = “https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg”   #图片链接

第三步:定义获取每个地区、每个类型页面的URL

比如你可以从下面这个网址,按照分类和地区查看电影列表。

https://movie.douban.com/tag/#/?sort=S&range=9,10&tags=电影

如果你要查看中国大陆电影列表,链接就变成下面:

https://movie.douban.com/tag/#/?sort=S&range=9,10&tags=电影,中国大陆

分解 URL 可以看到其中包含

-  `https://movie.douban.com/tag/#/`:  豆瓣电影分类页面

-  `sort=S`: 按评分排序

-  `range=9,10`: 评分范围 9 ~ 10

-  `tags=电影`: 标签为电影

其中参数tags可以包含多个以逗号分隔的标签,你可以分别选取类型和地区来进行进一步的筛选,例如选择类型为`剧情`,地区为`中国大陆`, 那么 URL 为

https://movie.douban.com/tag/#/?sort=S&range=9,10&tags=电影,剧情,中国大陆

所以我们定义一个函数构造对应类型和地区的URL地址,函数如下:

第四步:获取电影页面 HTML

因为有些列表需要多页显示,我们需要不断模拟点击加载更多按钮来显示这个列表上的全部电影,所以使用了selenium自动化测试工具来获取html页面内容,因为需要根据不同地区、不同类型页面的URL来获取页面信息,所以这里单独写个函数根据URL获取html内容;代码如下:

第五步:获得豆瓣电影的信息

在第二步我们已经定义好我们需要获取的信息,电影类型,电影地区这个两个变量是需要刷选,我们是需要根据不同地区、不同类型获取不同电影信息,所以定义函数是,电影类型,电影地区这个两个变量需要作为变量传过来;

函数内部主要通过BeautifulSoup解析HTML,因为电影信息都在class为list-wp的div里面,所以我们通过soup.find查找class=list-wp的div标签,soup.find_all方法,查找该div标签下面所有的<a>标签列表,<a>标签列表里面就是电影信息内容;然后通过遍历<a>标签列表,就可以找到电影的名称,评分,url链接,图片链接等信息;

<a>结构:

- 电影名称在class为title的标签里

- 电影评分在class为rate的标签里

- 电影url链接直接在a标签的herf获取

- 电影图片地址在img标签里

具体函数实现如下:

第六步:构造电影信息数据表

从网页上选取你最爱的电影类型,然后获取每个地区的电影信息后,我们可以获得一个包含类型、所有地区,评分超过9分的完整电影对象的列表。将列表输出到文件 movies.csv,格式如下:

我的豆瓣电影爬虫项目链接

相关文章

网友评论

      本文标题:Python 爬虫豆瓣电影

      本文链接:https://www.haomeiwen.com/subject/znxzihtx.html