【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页:小馒头学python
本文专栏: Python爬虫五十个小案例
专栏简介:分享五十个Python爬虫小案例

🪲前言
在这篇博客中,我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用
requests库来发送HTTP请求,BeautifulSoup库来解析HTML页面,并将数据存储到CSV文件中。这个爬虫将自动获取豆瓣电影Top250页面的信息,包括电影名称、导演、主演、评分等详细信息
豆瓣电影Top250是一个包含豆瓣评分最高的250部电影的榜单,是电影爱好者查找电影的一大宝库。本博客将指导大家如何通过编写Python爬虫自动获取豆瓣电影Top250的数据
🪲环境准备
首先,我们需要安装一些Python库来完成本次任务。以下是我们将使用的库:
requests:用来发送HTTP请求并获取网页内容。BeautifulSoup:用来解析HTML页面,提取我们需要的数据。csv:将爬取的数据保存到CSV文件中。
因为我们使用的是Python进行爬虫,所以我们使用的命令行是
pip install requests beautifulsoup4 csv
🪲爬虫原理与分析
豆瓣电影Top250的URL是 https://movie.douban.com/top250。页面内容是分页显示的,每一页展示25部电影,最多5页。我们需要访问这些页面并提取电影数据
数据结构分析
每一部电影的信息在HTML结构中都有相应的标签,我们需要从中提取出以下信息:
- 电影名称
- 电影评分
- 电影导演
- 电影主演
- 电影年份
- 电影类型
通过使用BeautifulSoup解析HTML,我们可以轻松提取这些信息
🪲代码具体的实现
发送请求获取网页内容
我们首先使用requests库发送请求来获取网页内容。豆瓣会返回HTML页面,我们将把这些内容传递给BeautifulSoup进行解析
import requests
from bs4 import BeautifulSoup# 设置请求头,避免被豆瓣屏蔽
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 获取豆瓣电影Top250的前五页数据
base_url = "https://movie.douban.com/top250"
movie_list = []def get_page(url):response = requests.get(url, headers=headers)return response.text
解析网页内容
使用BeautifulSoup解析HTML页面,找到每部电影的信息。每部电影的信息包含在div标签中,类名为item
def parse_page(html):soup = BeautifulSoup(html, 'html.parser')movies = soup.find_all('div', class_='item')for movie in movies:title = movie.find('span', class_='title').textrating = movie.find('span', class_='rating_num').textdirector, actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]year = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]movie_type = movie.find('span', class_='genre').text.strip()movie_info = {'title': title,'rating': rating,'director': director,'actors': actors,'year': year,'type': movie_type}movie_list.append(movie_info)
提取电影数据
我们现在可以循环访问每一页的URL并提取数据。豆瓣电影Top250有5页,URL结构为https://movie.douban.com/top250?start=X,其中X为每页的起始索引(0, 25, 50, …)
接下来我们的其他案例也会采取类似的分析方式,同学们可以
def main():for start in range(0, 250, 25):url = f"{base_url}?start={start}"html = get_page(url)parse_page(html)# 输出结果for movie in movie_list:print(movie)if __name__ == "__main__":main()
保存数据到CSV文件或者Excel文件
为了方便后续的数据分析,我们可以将数据保存到CSV文件中
import csvdef save_to_csv():keys = movie_list[0].keys()with open('douban_top250.csv', 'w', newline='', encoding='utf-8') as output_file:dict_writer = csv.DictWriter(output_file, fieldnames=keys)dict_writer.writeheader()dict_writer.writerows(movie_list)save_to_csv()
如果是Excel那么可以参考下面的案例代码
import pandas as pd # 导入pandas库def save_to_excel():df = pd.DataFrame(movie_list) # 将电影列表转换为DataFramedf.to_excel('douban_top250.xlsx', index=False, engine='openpyxl') # 保存为Excel文件
🪲完整的代码
import csvimport requests
from bs4 import BeautifulSoup
import pandas as pd # 导入pandas库# 设置请求头,避免被豆瓣屏蔽
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 获取豆瓣电影Top250的前五页数据
base_url = "https://movie.douban.com/top250"
movie_list = []# 发送请求获取网页内容
def get_page(url):response = requests.get(url, headers=headers)return response.text# 解析网页内容并提取电影信息
def parse_page(html):soup = BeautifulSoup(html, 'html.parser')movies = soup.find_all('div', class_='item')for movie in movies:title = movie.find('span', class_='title').textrating = movie.find('span', class_='rating_num').textdirector_actors = movie.find('div', class_='bd').find('p').text.strip().split("\n")[:2]director = director_actors[0]actors = director_actors[1] if len(director_actors) > 1 else ''# 处理电影类型,避免找不到的情况genre_tag = movie.find('span', class_='genre')movie_type = genre_tag.text.strip() if genre_tag else '未知'# 处理电影年份year_tag = movie.find('div', class_='bd').find('p').text.strip().split("\n")[0]# 构建电影信息字典movie_info = {'title': title,'rating': rating,'director': director,'actors': actors,'year': year_tag,'type': movie_type}# 将电影信息添加到列表中movie_list.append(movie_info)# 爬取豆瓣电影Top250的所有页面
def main():# 遍历前5页的豆瓣Top250for start in range(0, 250, 25):url = f"{base_url}?start={start}"html = get_page(url)parse_page(html)# 输出结果for movie in movie_list:print(movie)def save_to_csv():keys = movie_list[0].keys() # 获取电影数据字典的键(即列名)# 写入CSV文件with open('douban_top250.csv', 'w', newline='', encoding='utf-8-sig') as output_file:dict_writer = csv.DictWriter(output_file, fieldnames=keys)dict_writer.writeheader() # 写入列名dict_writer.writerows(movie_list) # 写入电影数据# 主函数
if __name__ == "__main__":main()save_to_csv()print("爬取完成,数据已保存到 douban_top250.csv")
🪲运行效果
运行上述代码后,你将会得到一个名为douban_top250.csv的文件,文件内容如下所示:

下图是保存为csv文件的格式,这里注意encoding=‘utf-8-sig’,encoding如果等于utf-8,那么直接双击csv文件会乱码的

🪲总结
本文主要介绍了如果使用简单的爬虫进行数据的爬取,这里主要进行豆瓣电影Top250的数据爬取,我们使用的库就是requests、bs4、pandas、csv等库,本节主要重在案例的实践,还想了解更多的爬虫案例可以关注我的专栏
Python爬虫五十个小案例:https://blog.csdn.net/null18/category_12840403.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12840403&sharerefer=PC&sharesource=null18&sharefrom=from_link
相关文章:
【Python爬虫五十个小案例】爬取豆瓣电影Top250
博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 🪲前言 在这篇博客中,我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求,…...
cocos creator 3.8 物理碰撞器Collider+刚体RigidBody 8
遇到一个朋友,你来就行的朋友,我过去了,管吃管住,这样的朋友真的很难求。 最近离职了,很难想象,一份策划书一天能给你改n次,一周能郁闷,上一个功能没搞完,让你搞下一个功…...
Python爬取豆瓣电影全部分类数据并存入数据库
在当今数字化的时代,网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天,我就来和大家分享一段有趣的代码,它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示(文末附完整代码): 目…...
算法模板1:排序+二分+高精度+前缀+差分
文章目录 1.1 排序STL sort函数快速排序算法模板归并排序算法模板 1.2 二分整数二分算法模板浮点数二分算法模板 1.3 高精度高精度加法高精度减法高精度乘低精度高精度除以低精度 1.4 前缀和与差分**一维前缀和****二维前缀和****一维差分****二维差分** 之前整理了好多算法模板…...
SpringBoot实现单文件上传
一、在springBoot项目中的pom.xml添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 二、在资源目录下的static目录下中创建一个upload.html的表单文件…...
rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题
我们在使用rust-oracle crate连接oracle进行测试的过程中,会发现无法连接oracle,测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库,我们通过安装orac…...
YOLOv11(Ultralytics)视频选定区域目标统计计数及跟踪
在计算机视觉的众多应用场景中,对特定区域的目标进行检测、跟踪与计数是一个常见且重要的需求。无论是在智慧交通中统计通过特定路口的车辆数量,还是在零售分析中追踪进入特定区域的顾客行为,这一功能都发挥着不可或缺的作用。 随着深度学习…...
24小时自动监控,自动录制直播蓝光视频!支持抖音等热门直播软件
文章目录 📖 介绍 📖🏡 演示环境 🏡📒 工具特点📒📝 使用🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 对于许多直播爱好者和内容创作者而言,错过心爱的直播或难以搜集视频素材始终是一个难题。今天,给大家分享的这款工具可以轻松解决这个问题,它拥有…...
InfiniBand(IB)快速上手
什么是IB: InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系…...
D74【 python 接口自动化学习】- python 基础之HTTP
day74 http基础定义 学习日期:20241120 学习目标:http定义及实战 -- http基础介绍 学习笔记: HTTP定义 HTTP 是一个协议(服务器传输超文本到浏览器的传送协议),是基于 TCP/IP 通信协议来传递数据&…...
移动光猫[HS8545M5-10]获取超密
移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网,查询资料说是需要将光猫桥接到外网;但是使用光猫后边的用户名密码根本就找不到…...
原生JS和CSS,HTML实现开屏弹窗
开屏弹窗常应用于打开游戏,或者打开网站的时候,跳出来在正中间,来显示一些信息,并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...
vue--制作购物车
🤔如何制作出下列效果呢?👇 😶🌫️首先: 设置css样式: <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…...
深度测评腾讯云 HAI 智算服务:高性能 AI 计算的新标杆
本文 一、引言二、产品功能深度解析2.1 多样化的 GPU 配置选择2.2 预配置开发环境示例: 2.3 实时性能监控 三、核心技术特点与优势3.1 云端弹性扩展3.2 高性能计算架构 四、实际测试与代码案例4.1 NLP 案例:使用 BERT 进行情感分类数据集:IMD…...
MQ重复消费与消息顺序
如何避免消息重复消费 RocketMQ:给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议,原因是在高并发场景下这个MessageID不保证全局唯一性。 最好由业务方创建一个与业务相关的全局唯一的ID来区分消息&am…...
应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法
目录 问题分析 解决方法 下载插件包:x-perm-apply-instr 将插件包导入进你项目中的uni_modules文件夹 在项目中的main.js文件中添加以下代码 完成 其它注意事项 addPermisionInterceptor 添加 uniApi 调用拦截 removePermisionInterceptor 移除 uniApi 调用…...
第 32 章 - Go语言 部署与运维
在Go语言的应用开发中,部署与运维是一个非常重要的环节。它不仅关系到应用能否顺利上线,还直接影响到应用的性能、安全性和可维护性。以下是根据您的需求整理的关于Go语言应用的打包和发布、容器化部署、监控和日志管理的相关内容。 1. 应用的打包和发布…...
噪杂环境离线语音通断器效果展示
介于之前的离线语音通断器模块的使用环境大部分为噪音比较小的环境中,部分客户对环境提出了更高的要求,能在噪杂、室外或者有一定的噪音的车内使用的模块开发需求被提高到了一个新的层次。最近找到某些能支持室外噪杂环境使用的芯片和模组,打…...
【django】扩展
1. Promise 1.1 对象和状态 是什么?是前端开发时js中的一个对象(包裹)。【对象】【异步请求】# 对象中有一个状态的值,status # 创建对象,不赋值,statuspendding let v1 new Promise(function(resolve, …...
逆向破解识别基础
找main函数: (使用OllyDbg软件) 方法一: 因为main函数需要三个参数,所以遇到三个参数加一个调用,那么可能是main函数。 方法二: 如果main函数中有字符串或者调用函数等一些唯一标识&#x…...
SAR成像系列:【10】合成孔径雷达(SAR)波数域(omega-K)算法实战:从理论到Matlab实现
1. 波数域算法:为什么它是SAR成像的"瑞士军刀"? 第一次接触omega-K算法时,我被它优雅的数学表达和精确的成像效果震撼到了。这种算法在业内有个更直白的名字——距离徙动算法(Range Migration Algorithm)&am…...
下篇:那个听声辨位的侦探后来破了大案——AI中隐马尔可夫模型的类型与作用,以及它为什么还在被使用
我们说了隐马尔可夫模型是一个“只能听声、不能见人”的侦探,靠着一串声音推理出隔壁房间在发生什么。现在的问题是:它到底有哪些具体的“形态”?不同类型的隐马尔可夫模型分别擅长什么?这个“老古董”在今天还能干什么࿱…...
256K上下文颠覆智能编程:Qwen3-Coder重构全栈开发效率范式
256K上下文颠覆智能编程:Qwen3-Coder重构全栈开发效率范式 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-Coder-30B-A3B-Instruct 问题发现:传统AI编程助手的三大痛点 2025年Stac…...
Nano Banana Images API 集成指南
本文将介绍如何集成和使用 Nano Banana Images API。这一接口支持两种功能:图像生成 (generate) 和 图像编辑 (edit)。无论是创建独特的艺术作品,还是对现有图像进行修改,Nano Banana 都能满足您的需求。 环境准备 在使用该 API 之前&#…...
input-overlay多语言支持:如何为全球观众轻松定制直播输入显示
input-overlay多语言支持:如何为全球观众轻松定制直播输入显示 【免费下载链接】input-overlay Show keyboard, gamepad and mouse input on stream 项目地址: https://gitcode.com/gh_mirrors/in/input-overlay 想要让全球观众都能轻松理解你的游戏操作吗&a…...
如何高效管理游戏资源:GodotPckTool 完全指南与5个实战技巧
如何高效管理游戏资源:GodotPckTool 完全指南与5个实战技巧 【免费下载链接】GodotPckTool Standalone tool for extracting and creating Godot .pck files 项目地址: https://gitcode.com/gh_mirrors/go/GodotPckTool GodotPckTool 是一个独立的命令行工具…...
戴尔DELL笔记本Ubuntu24.04与Windows11双系统共存:从分区到引导的完整避坑指南
1. 准备工作:磁盘分区与系统盘制作 第一次在戴尔笔记本上装双系统时,我对着磁盘管理界面发呆了半小时——既怕误删Windows分区,又担心空间分配不合理。后来发现,只要掌握几个关键点,整个过程比想象中简单得多。 先说说…...
Pixel Aurora Engine镜像部署:多用户并发生成的Streamlit服务配置
Pixel Aurora Engine镜像部署:多用户并发生成的Streamlit服务配置 1. 像素极光引擎简介 Pixel Aurora(像素极光)是一款基于AI扩散模型的高端绘图工作站,采用独特的复古像素游戏风格界面设计。这款工具能够将文字描述转化为极具视…...
2024年技术趋势:AI、云计算与区块链的颠覆性变革
技术趋势预测文章大纲引言简要介绍技术趋势预测的重要性,提及CSDN作为技术社区的影响力,说明本文将基于当前技术发展分析未来趋势。人工智能与机器学习讨论生成式AI(如GPT-4、Stable Diffusion)的演进方向,包括多模态模…...
从长城杯赛题到实战:基于ZeroShell防火墙的威胁流量深度狩猎
1. 从CTF赛题到真实威胁狩猎的思维转换 第一次接触长城杯那道ZeroShell防火墙的赛题时,我还在纳闷:这种刻意设计的漏洞场景,在真实企业里真的存在吗?直到上个月帮某制造业客户做安全巡检,亲眼看到他们的ZeroShell 3.9.…...
