如何用 Python 爬取豆瓣电影 Top 250?

在这里插入图片描述


如何用 Python 爬取豆瓣电影 Top 250?

前言

豆瓣电影 Top 250 是影迷们寻找经典好片的常用榜单。作为 Python 爱好者,我们可以利用 Python 爬虫 技术将该榜单的所有电影标题抓取下来,并在本地保存或分析。本文将详细介绍如何实现这个目标。


1. 工具与环境

在实现爬取的过程中,我们主要会用到以下工具:

  • Python 3.x:主语言。
  • requests 库:用于发送 HTTP 请求。
  • BeautifulSoup4 库:用于解析网页内容。
  • 豆瓣 Top 250 页面:分页展示电影榜单,每页 25 条,共 10 页。

2. 爬虫实现步骤

2.1 页面结构分析

打开 豆瓣电影 Top 250 页面,按 F12 查看网页源代码:

  • 每个电影标题包含在:
    <span class="title">电影名称</span>
    
  • 每页显示 25 部电影,共 10 页,URL 格式如下:
    https://movie.douban.com/top250?start=0
    https://movie.douban.com/top250?start=25
    https://movie.douban.com/top250?start=50
    ...
    
2.2 爬虫代码

下面是完整的代码,包含分页爬取、标题提取和去重处理:

from bs4 import BeautifulSoup
import requests

# 设置请求头,模拟浏览器访问
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"
}

# 电影标题列表
all_movies = []

# 逐页爬取,每页 25 条,总共 10 页
for page in range(10):
    url = f"https://movie.douban.com/top250?start={page * 25}"
    response = requests.get(url, headers=headers)

    # 确保请求成功
    if response.status_code == 200:
        content = response.text
        soup = BeautifulSoup(content, "html.parser")

        # 提取标题并过滤外文名
        titles = soup.findAll("span", attrs={"class": "title"})
        for link in titles:
            title = link.text
            if "/" not in title:  # 过滤掉外文名
                all_movies.append(title)
    else:
        print(f"请求失败,状态码: {response.status_code}, 页面: {url}")
        break

# 输出所有电影标题
for idx, movie in enumerate(all_movies, 1):
    print(f"{idx}. {movie}")

# 验证数量
print(f"\n总共爬取到 {len(all_movies)} 部电影")

3. 代码解析

  1. 设置请求头
    模拟浏览器访问,防止网站反爬机制拦截请求:

    headers = {
        "User-Agent": "Mozilla/5.0 ..."
    }
    
  2. 分页请求
    通过循环逐页爬取,每次请求对应页面:

    for page in range(10):
        url = f"https://movie.douban.com/top250?start={page * 25}"
    
  3. HTML 解析
    使用 BeautifulSoup 提取所有包含电影标题的 <span> 标签:

    titles = soup.findAll("span", attrs={"class": "title"})
    
  4. 去除外文名
    豆瓣的标题中有时包含外文名(例如:肖申克的救赎 / The Shawshank Redemption),通过简单判断过滤掉:

    if "/" not in title:
        all_movies.append(title)
    
  5. 结果输出
    打印所有电影标题,并验证爬取数量是否正确。


4. 运行结果

运行代码后,会输出类似以下结果:
在这里插入图片描述

1. 肖申克的救赎
2. 霸王别姬
3. 阿甘正传
4. 这个杀手不太冷
5. 美丽人生
...
250. 教父2

总共爬取到 250 部电影

5. 注意事项

  1. 反爬机制

    • 添加 User-Agent 头部信息,模拟正常用户访问。
    • 若请求频繁,建议增加访问间隔,例如 time.sleep(1)
  2. HTML 结构变化
    豆瓣可能随时更新页面结构,需要重新检查标签选择器。

  3. 数据存储
    爬取的数据可存储为文件,如 CSV、TXT、JSON 格式,便于后续分析。


6. 进阶优化

  • 多线程爬取:使用多线程提高爬取速度。
  • 数据存储:将结果保存到数据库(如 SQLite)。
  • 图表分析:用 Matplotlib 绘制电影排名分析图。

总结

通过本文的学习,你已掌握了如何使用 Python 和 BeautifulSoup 爬取豆瓣电影 Top 250 榜单。这不仅帮助你加深了对网页爬虫的理解,也为进一步数据分析和项目开发打下了基础。

如果你感兴趣,可以尝试扩展爬取电影的评分、简介、导演等信息,做更深入的数据分析。


代码已提供,动手实践是最好的学习方式! 🚀
如果喜欢这篇博客,请点赞、分享或者留言交流!😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值