前言


之前向各位网友分享过一篇文章《【干货】-- 带你抓取并分析知乎高评分电影》,是关于如何从知乎网站中抓取经网友整理好后的电影信息,说白了是在网友汇总的基础上做了数据的爬虫工作。今天就来手把手的分享一篇关于如何直接从豆瓣网中抓取所有电影(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. Windows使用MSVC,命令行编译,链接64位dll,Python调用
  2. python自学多久可以找到工作-自学Python的高效方法,学Python多久能找到工作?
  3. ROS学习(十二):ROS URDF-model_state
  4. little problem
  5. 尼康d850相机参数测试软件,尼康 D850最全参数信息曝光 快来围观
  6. CSS基础(part20)--CSS3结构伪类选择器
  7. python文件打包发布(引用的包也可以加进来),打包出错解决了,运行出错解决了...
  8. 【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(2)
  9. Beetl学习总结(2)——基本用法
  10. mingw,cygwin,gnuwin32,msys,msys2 的区别
  11. 长连接与短连接的区别
  12. 倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶
  13. 使用 乐吾乐topology 遇到的问题解决方法汇总
  14. 有关String类与StringBuffer类
  15. 软件开发生命周期及开发模型
  16. matlab设置xyz,matlab基本XYZ立体绘图命令
  17. 自己用html + js 一百行代码做一个朗读器
  18. 网络与信息安全实验总结(报文监听与分析,漏洞扫描,逆向工程,安全产品)
  19. MyCat —— 性能最好的数据库中间件
  20. USB 设置接口SetInterface

热门文章

  1. 程序员应该了解的数字
  2. 教育行业推动校园信息化建设的重中之重
  3. C++ 排序函数 sort(),qsort()的用法
  4. 2022-10-18
  5. 培养 逻辑思维和抽象能力
  6. 2019电赛所需仪器设备和主要元器件清单
  7. Base64加密工具类
  8. SAP MM 跨公司采购
  9. 分享一下:2011回顾:20个将JavaScript推到极致的网站(转)
  10. 第一章 SQL谓词的概述(一)