Python爬虫实战:豆瓣电影Top250数据采集指南

0 次阅读

在数据分析、自动化处理以及机器学习项目中,电影数据往往是练习 Python 爬虫技术的经典案例。豆瓣电影 Top250 汇集了大量高评分影片信息,包含电影名称、导演、主演、年份、评分、评价人数以及简介等内容,非常适合作为数据采集与分析的数据源。通过 Python 编写爬虫程序,可以快速获取这些公开信息,并进一步进行数据清洗、统计分析和可视化展示。

Python爬虫采集豆瓣电影Top250的应用价值

豆瓣电影 Top250 数据结构相对清晰,页面内容稳定,非常适合初学者学习网络请求、HTML解析以及数据存储等核心技术。

通过该实战项目,可以掌握以下技能:

  • 使用 Python 发送 HTTP 请求获取网页内容;

  • 利用 BeautifulSoup 解析 HTML 文档;

  • 通过 CSS 选择器或 XPath 提取目标数据;

  • 实现多页面数据循环采集;

  • 将爬取结果保存为 CSV、Excel 或数据库文件;

  • 对采集的数据进行简单分析。

对于刚接触 Python 爬虫的开发者来说,豆瓣电影 Top250 是一个完整的小型项目,可以帮助理解爬虫开发的基本流程。

爬虫开发环境准备

开始编写程序之前,需要安装 Python 环境以及相关第三方库。

本案例主要使用以下工具:

  • Python 3.x

  • Requests:负责发送网络请求;

  • BeautifulSoup4:用于解析网页结构;

  • Pandas:用于数据整理和保存。

安装依赖库:

Bash
pip install requests beautifulsoup4 pandas

如果需要保存 Excel 文件,还可以安装:

Bash
pip install openpyxl

安装完成后,即可开始编写豆瓣电影数据采集程序。

分析豆瓣电影Top250页面结构

豆瓣电影 Top250 页面采用分页展示方式,每页包含 25 部电影,总共 10 页。

页面地址规律如下:

https://movie.douban.com/top250
https://movie.douban.com/top250?start=25
https://movie.douban.com/top250?start=50

其中:

  • 第一页参数 start=0;

  • 第二页参数 start=25;

  • 第三页参数 start=50。

每增加一页,start 参数增加 25。

网页中的电影信息通常包含:

  • 电影标题;

  • 导演和主演信息;

  • 上映年份;

  • 国家地区;

  • 电影类型;

  • 豆瓣评分;

  • 评论数量;

  • 电影简介。

通过浏览器开发者工具查看 HTML 结构,可以发现每部电影都位于固定的标签区域中,方便使用解析工具提取。

使用Requests获取网页数据

Requests 是 Python 中最常用的 HTTP 请求库,可以模拟浏览器访问网页。

基础代码如下:

Python
运行
import requests

url = "https://movie.douban.com/top250"

headers = {
    "User-Agent": "Mozilla/5.0"
}

response = requests.get(url, headers=headers)

print(response.text)

其中 User-Agent 请求头用于模拟真实浏览器访问,降低请求被服务器拒绝的概率。

获取网页源码后,就可以进一步解析其中的数据。

BeautifulSoup解析电影信息

BeautifulSoup 可以将复杂的 HTML 页面转换成容易操作的对象。

示例:

Python
运行
from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "html.parser")

movies = soup.find_all("div", class_="item")

for movie in movies:
    title = movie.find("span", class_="title").text
    print(title)

运行程序后,可以输出当前页面中的电影名称。

通过 find 方法定位 HTML 标签,再使用 text 获取文本内容,就完成了基本的数据提取。

完整采集豆瓣电影Top250代码

下面给出一个完整示例,实现电影名称、评分、评价人数等信息采集:

Python
运行
import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {
    "User-Agent": "Mozilla/5.0"
}

movie_list = []

for page in range(10):
    url = f"https://movie.douban.com/top250?start={page * 25}"

    response = requests.get(url, headers=headers)

    soup = BeautifulSoup(response.text, "html.parser")

    items = soup.find_all("div", class_="item")

    for item in items:
        title = item.find("span", class_="title").text

        score = item.find(
            "span",
            class_="rating_num"
        ).text

        info = item.find(
            "div",
            class_="bd"
        ).find_all("p")[0].text.strip()

        movie_list.append({
            "电影名称": title,
            "评分": score,
            "详细信息": info
        })

df = pd.DataFrame(movie_list)

df.to_csv(
    "douban_top250.csv",
    index=False,
    encoding="utf-8-sig"
)

print("数据采集完成")

程序运行后,会生成 douban_top250.csv 文件,其中保存了采集到的电影数据。

数据保存与后续分析

爬取的数据通常不会直接用于展示,而是需要进一步处理。

例如,可以统计:

评分最高的电影

通过 Pandas 排序:

Python
运行
df.sort_values(
    by="评分",
    ascending=False
)

可以快速找到高评分电影。

分析电影年份分布

如果进一步提取上映年份,就可以统计不同年代电影数量。

例如:

  • 哪个年代经典电影最多;

  • 不同年代评分变化趋势;

  • 电影类型发展情况。

数据可视化展示

结合 Matplotlib 或 ECharts,可以制作:

  • 电影评分排行榜;

  • 年份趋势图;

  • 国家电影数量统计图;

  • 导演作品数量分析图。

这样可以将简单爬虫项目扩展为完整的数据分析案例。

Python爬虫开发中的常见问题

1. 请求失败或无法获取页面

可能原因:

  • 请求频率过高;

  • 缺少请求头;

  • 网络环境限制。

解决方法:

  • 添加 User-Agent;

  • 控制访问速度;

  • 使用异常处理机制。

例如:

Python
运行
try:
    response = requests.get(
        url,
        headers=headers,
        timeout=10
    )
except Exception as e:
    print(e)

2. 页面结构变化导致解析失败

网页结构可能随着时间调整,如果固定使用某个 class 名称,可能导致程序失效。

优化方式:

  • 使用更稳定的 HTML 层级定位;

  • 增加数据为空判断;

  • 定期检查页面结构。

3. 字符编码问题

中文数据保存时容易出现乱码。

保存 CSV 时建议:

Python
运行
encoding="utf-8-sig"

该编码可以更好兼容 Excel 打开中文文件。

爬虫项目中的规范与注意事项

开发网络爬虫时,需要遵守网站公开规则,合理控制访问频率。

实际项目中应注意:

  • 不要短时间发送大量请求;

  • 不采集用户隐私数据;

  • 不绕过网站安全限制;

  • 优先使用网站提供的公开接口。

合理使用爬虫技术,可以帮助完成数据研究、信息整理和自动化任务。

从豆瓣Top250扩展到实际项目

完成基础采集后,可以继续增加功能:

添加数据库存储

使用 MySQL、SQLite 保存电影数据:

  • 方便查询;

  • 支持大量数据管理;

  • 便于开发数据分析系统。

增加定时任务

结合 Python 定时模块,实现:

  • 每日自动更新数据;

  • 记录评分变化;

  • 生成分析报告。

开发可视化平台

结合 Flask、Django 等 Web 框架,可以制作电影数据展示网站。

例如:

  • 电影排行榜;

  • 搜索系统;

  • 数据统计页面。

总结

Python爬虫实战项目不仅能够帮助学习网页数据采集技术,还可以掌握数据处理、存储和分析的完整流程。通过豆瓣电影 Top250 数据采集案例,可以深入理解 Requests 请求机制、BeautifulSoup 页面解析以及 Pandas 数据处理方法。

对于 Python 初学者而言,这是一个非常适合练习的项目。随着技术提升,还可以进一步结合数据库、数据可视化以及 Web 开发,将简单的数据采集程序升级为完整的数据分析应用。