【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…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
