快来围观2W+的豆瓣电影分类排行榜(含代码)
前言
之前向各位网友分享过一篇文章《【干货】-- 带你抓取并分析知乎高评分电影》,是关于如何从知乎网站中抓取经网友整理好后的电影信息,说白了是在网友汇总的基础上做了数据的爬虫工作。今天就来手把手的分享一篇关于如何直接从豆瓣网中抓取所有电影(2万多部)的评分信息,希望对热爱看电影的小伙伴有所帮助,减少不知道看啥电影的困惑。首先来看一下“豆瓣电影排行榜”的主页截图:
会发现,在主页中的左侧包含了各式各样的电影类型,如剧情、喜剧、爱情和动作等。当我任意点击一个类型,就会出现如下的截图,以剧情类电影为例:
在上面的截图中,有我们需要抓取的每部电影的信息,如电影名称、电影评分、参与评论的人数等。按照一般的爬虫顺序,会首先查看电影信息页的源代码,即按一下F12键,然后点击电影名称,获得其所属的标记。如下图所示:
虽然找到了标题所属的“span”下面的“a”标签,但是当你去爬虫时,却没有任何返回的结果。究其原因,发现原来电影相关的数据并没有直接存储在HTML源代码中,而是异步存储在了json文件中。如下图所示:
# 剧情类电影主页url = 'https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action='# 发送请求res = requests.get(home, headers = headers).text# 解析请求后的响应信息soup = BeautifulSoup(res,'html.parser')# 按照标记爬取电影名称soup.findAll('span',{'class':'movie-name-text'})
根据标记查不到内容
异步存储
异步存储的链接
链接的内容(电影信息)
从这个异步存储的链接中我们会发现,只需要改动链接中的几个值就可以获得其它类型的电影信息。其中第一个红框控指的是电影类型,第二个红框控指的是电影排名的百分比,如前10%的电影(即90%~100%),第三个红框指的是页面显示多少部电影,这里不妨设置1000部电影(虽然10%比例的电影只有600左右部)。
数据采集—电影数据
知道了该如何抓取豆瓣电影的步骤后,我们直接上代码,代码中每一步都给出了解释,感兴趣的读者可以仔细研究并操作:
# ========== Python3 + Jupyter ========== ## ==================== 步骤一 抓取所有电影的类型id ==================== ## 导入第三方包import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport timeimport re# 设置头文件,用于反爬虫headers = {'Accept':'*/*','Accept-Encoding':'gzip, deflate, br', 'Accept-Language':'zh-CN,zh;q=0.8', 'Connection':'keep-alive', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'} # 根据豆瓣主页抓取各个电影的类型IDhome = 'https://movie.douban.com/chart'res = requests.get(home, headers = headers).text
soup = BeautifulSoup(res,'html.parser')# 通过正则表达式获取每个电影类型的idtype_id = re.findall('type=(.*?)&', str(soup.findAll('div',{'class':'types'})[0])) # ==================== 步骤二 根据异步存储的链接规律,生成所有的抓取链接 ==================== ## https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20# 根据url的规律,生成抓取数据的目标urlurls = []for num in type_id: for i in range(100,-10,-10):urls.append('https://movie.douban.com/j/chart/top_list?type='+num+'&interval_id='+str(i)+'%3A'+str(i-10)+'&action=&start=0&limit=100')# ==================== 步骤三 抓取电影信息 ==================== ## 构建空列表,用于存储爬虫的数据信息title = []types = []
regions = []
date = []
actor_count = []
score = []
vote_counts = []
actors = []# 通过for循环抓取每一页电影的信息for url in urls:res = requests.get(url, headers = headers).text # 通过正则表达式完成数据的扣取title.extend(re.findall('"title":"(.*?)",', res))types.extend(re.findall('"types":\[(.*?)\],', res))regions.extend(re.findall('"regions":\[(.*?)\],', res))date.extend(re.findall('"release_date":"(.*?)",', res))actor_count.extend(re.findall('"actor_count":(.*?),', res))score.extend(re.findall('"score":"(.*?)",', res))vote_counts.extend(re.findall('"vote_count":(.*?),', res))actors.extend(re.findall('"actors":\[(.*?)\],', res)) # 每隔3秒抓取一页数据time.sleep(3) # 将抓取下来的数据存放到字典中 data_dict = {'title':title,'types':types,'regions':regions, 'date':date,'actor_count':actor_count,'score':score, 'vote_counts':vote_counts,'actors':actors} # ==================== 步骤四 数据的存储 ==================== # # 将数据存储为数据框结构df = pd.DataFrame(data_dict)# 数据导出df.to_excel('films_info.xlsx', index = False)
到此为止,我们就完成了“豆瓣电影分类排行榜”所有数据的采集,我们简单看一下爬虫后的输出效果:
结语
OK,今天关于“豆瓣电影分类排行榜”的爬虫,我们就分享到这里,喜欢看电影的你还不赶快试试!!如果你有问题,欢迎在公众号的留言区域表达你的疑问。同时,也欢迎各位朋友继续转发与分享文中的内容,让跟多的人学习和操作。最后,本文相关的Python脚本和PDF版本已存放到百度云盘,可以通过下面的链接获取:
链接: https://pan.baidu.com/s/1miwvW6k 密码: wnp5
每天进步一点点2015
学习与分享,取长补短,关注小号!
长按识别二维码 马上关注
快来围观2W+的豆瓣电影分类排行榜(含代码)相关推荐
- 豆瓣电影分类排行榜-剧情片-爬虫
豆瓣电影分类排行榜 - 剧情片爬虫 Tips: 爬取的页面:https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&typ ...
- python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...
1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...
- 爬虫自学day4:requests模块之爬取豆瓣电影分类排行榜
豆瓣电影排行榜界面: 选择喜剧分类: 我们要爬取的数据是:电影名称.导演.演员.上映时间.国家等这些数据. 如何进行爬取: 这些信息是当前页面的局部信息,那么是否会遇到数据解析. 除了数据解析还可以使 ...
- Python爬虫实战003:爬取豆瓣电影分类排行榜
import requests import jsonif __name__ == '__main__':url = "https://movie.douban.com/j/chart/to ...
- 爬取豆瓣电影动画排行榜
1 需求 爬取豆瓣电影动画类别排行榜. 2 代码实现 import jsonimport requestsurl = "https://movie.douban.com/j/chart/to ...
- python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试
from bs4 import BeautifulSoup import openpyxl import re import urllib.request import urllib.error # ...
- php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码
搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. for ($start = 0; $start < 250; $start ...
- 凯斯西储(CWRU)数据集解读并将数据集划分为10分类(含代码)
凯斯西储大学轴承故障数据集官方网址:https://engineering.case.edu/bearingdatacenter/download-data-file 官方数据集整理版(不用挨个下了) ...
- [爬虫] 爬取豆瓣电影排行榜
申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删 爬取豆瓣电影排行榜 这是一个Scrapy框架入门级的项目, 它可以帮助我们基本了解Scrapy的操作流程和运行原理 这次我们要做例子的网站 ...
最新文章
- Windows使用MSVC,命令行编译,链接64位dll,Python调用
- python自学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?
- ROS学习(十二):ROS URDF-model_state
- little problem
- 尼康d850相机参数测试软件,尼康 D850最全参数信息曝光 快来围观
- CSS基础(part20)--CSS3结构伪类选择器
- python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了...
- 【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(2)
- Beetl学习总结(2)——基本用法
- mingw,cygwin,gnuwin32,msys,msys2 的区别
- 长连接与短连接的区别
- 倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶
- 使用 乐吾乐topology 遇到的问题解决方法汇总
- 有关String类与StringBuffer类
- 软件开发生命周期及开发模型
- matlab设置xyz,matlab基本XYZ立体绘图命令
- 自己用html + js 一百行代码做一个朗读器
- 网络与信息安全实验总结(报文监听与分析,漏洞扫描,逆向工程,安全产品)
- MyCat —— 性能最好的数据库中间件
- USB 设置接口SetInterface