前言


之前向各位网友分享过一篇文章《【干货】-- 带你抓取并分析知乎高评分电影》,是关于如何从知乎网站中抓取经网友整理好后的电影信息,说白了是在网友汇总的基础上做了数据的爬虫工作。今天就来手把手的分享一篇关于如何直接从豆瓣网中抓取所有电影(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=(.*?)&amp',                      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+的豆瓣电影分类排行榜(含代码)相关推荐

  1. 豆瓣电影分类排行榜-剧情片-爬虫

    豆瓣电影分类排行榜 - 剧情片爬虫 Tips: 爬取的页面:https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&typ ...

  2. python提取ajax异步加载数据_python爬取豆瓣电影分类排行榜引出的异步加载(AJAX)问题...

    1.背景 之前的文章中已经介绍过猫眼TOP100的电影信息爬取案例,网页每页有10条电影信息,通过翻页发现URL变化规律构造循环爬取10页100条全部电影信息.但是豆瓣电影分类排行榜的网页情况就所不同 ...

  3. 爬虫自学day4:requests模块之爬取豆瓣电影分类排行榜

    豆瓣电影排行榜界面: 选择喜剧分类: 我们要爬取的数据是:电影名称.导演.演员.上映时间.国家等这些数据. 如何进行爬取: 这些信息是当前页面的局部信息,那么是否会遇到数据解析. 除了数据解析还可以使 ...

  4. Python爬虫实战003:爬取豆瓣电影分类排行榜

    import requests import jsonif __name__ == '__main__':url = "https://movie.douban.com/j/chart/to ...

  5. 爬取豆瓣电影动画排行榜

    1 需求 爬取豆瓣电影动画类别排行榜. 2 代码实现 import jsonimport requestsurl = "https://movie.douban.com/j/chart/to ...

  6. python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试

    from bs4 import BeautifulSoup import openpyxl import re import urllib.request import urllib.error # ...

  7. php采集豆瓣评分,抓取豆瓣电影TOP250的PHP代码

    搜索热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. for ($start = 0; $start < 250; $start ...

  8. 凯斯西储(CWRU)数据集解读并将数据集划分为10分类(含代码)

    凯斯西储大学轴承故障数据集官方网址:https://engineering.case.edu/bearingdatacenter/download-data-file 官方数据集整理版(不用挨个下了) ...

  9. [爬虫] 爬取豆瓣电影排行榜

    申明:本文对爬取的数据仅做学习使用,不涉及任何商业活动,侵删 爬取豆瓣电影排行榜 这是一个Scrapy框架入门级的项目, 它可以帮助我们基本了解Scrapy的操作流程和运行原理 这次我们要做例子的网站 ...

最新文章

  1. 19.04.02笔记
  2. BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)
  3. 开发者AI职业指南:CSDN《AI技术人才成长路线图V1.0》重磅发布
  4. golang 函数 传入返回 slice/map/struct 本质
  5. Sublime Text2 快捷键汇总
  6. fantouch os Android 7,Funtouch OS 3.1 with Android 7.1升级计划
  7. 打家劫舍—leetcode198
  8. J2EE与.NET技术架构的比较
  9. 【并查集】打击犯罪(ssl 2342)
  10. 排序(Sort)--【一】
  11. 在线mod计算机,MOD大师教程 手把手教你改造电脑机箱
  12. python后端需要什么基础_【后端开发】python爬虫需要什么基础
  13. 如何查看交换机某端口下接什么设备
  14. 个人作业-软件产品案例分析
  15. Mysql数据库详解
  16. SwiftUI HealthKit 基础教程
  17. python 求复数的模
  18. 用 Python 帮女友修改微信运动步数,妹子直呼内行
  19. python迭代器的用法_python的装饰器,迭代器用法
  20. 解决2K 显示器的尴尬为MacBook 开启HiDPI(新方法支持M1)

热门文章

  1. 背包好题(原题链接+题解
  2. Tensorflow的负采样函数Sampled softmax loss踩坑之旅
  3. BP网络逼近仿真实例
  4. 锤子科技官网:问题整理及注意事项
  5. js相册特效带缩略图
  6. Drawable介绍
  7. 安卓踩坑记录之自定义Drawable - 解决自定义Drawable不显示的问题
  8. SQL Server2008(数据库)安装后,1433端口没监听问题
  9. java查询数据库并显示窗口,面试总结
  10. 线性非时变系统理论(LTI系统理论)