news 2026/5/12 20:17:43

Python 网络爬虫从入门到实战:手把手教你爬取豆瓣电影排行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 网络爬虫从入门到实战:手把手教你爬取豆瓣电影排行

在大数据时代,网络爬虫已成为信息采集的核心工具,广泛应用于数据分析、搜索引擎优化等领域。Python 凭借简洁的语法和强大的库支持,成为编写爬虫的首选语言。本文将从基础概念出发,结合 requests 和 beautifulsoup4 库的实战应用,带大家完成豆瓣电影排行的数据爬取,轻松掌握爬虫核心技能。

一、网络爬虫核心认知

网络爬虫(Web Crawler)是按特定规则自动抓取万维网信息的程序或脚本,如同在网络中漫游的 “蜘蛛”,通过网页中的超链接持续探索更多页面。其核心工作流程可概括为三步:

  1. 数据采集:通过 HTTP 请求获取网页原始内容;
  2. 数据处理:解析 HTML/XML 文档,提取有效信息;
  3. 数据存储:将有用数据持久化到文件或数据库。

二、环境准备:必备库安装

爬虫开发需先安装两个核心库,直接通过 pip 命令即可完成:

  • requests 库:模拟浏览器发送 HTTP 请求,获取网页内容
pip install requests

beautifulsoup4 库:解析 HTML 页面,提取目标数据

pip install beautifulsoup4

三、核心库详解与基础用法

(一)requests 库:获取网页内容

requests 库封装了复杂的 HTTP 请求逻辑,使用起来简洁直观,核心功能如下:

  • 支持 GET/POST/PUT/DELETE 等 HTTP 方法;
  • 自动处理编码、Cookie 和连接池;
  • 提供超时设置和异常处理机制。

基础使用步骤

  1. 导入库:import requests
  2. 发送请求:使用 get () 方法获取网页,需设置 User-Agent 伪装浏览器
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"} url = "https://movie.douban.com/chart" response = requests.get(url, headers=headers, timeout=10)

3.处理响应:通过 status_code 判断请求状态(200 为成功),text 属性获取网页文本

if response.status_code == 200: html = response.text # 获取HTML字符串 response.encoding = response.apparent_encoding # 自动检测编码

(二)beautifulsoup4 库:解析网页数据

获取 HTML 内容后,需用 beautifulsoup4 解析结构,提取目标信息,其核心优势是支持灵活的选择器语法。

基础使用步骤

  1. 导入库:from bs4 import BeautifulSoup
  2. 创建解析对象:指定 HTML 文本和解析器(html.parser 为内置解析器)
soup = BeautifulSoup(html, "html.parser")

3.提取数据:支持两种核心选择器

  • 节点选择器:直接通过标签名获取元素,如soup.title获取标题,soup.p获取第一个 p 标签;
  • 方法选择器:使用 find ()(获取第一个匹配结果)和 find_all ()(获取所有匹配结果),支持按标签名、属性筛选。

常用属性说明

  • name:获取标签名称(如 "div");
  • attrs:获取标签属性(返回字典,如 href、class);
  • string:获取标签内文本内容;
  • stripped_strings:获取所有非空文本(生成器对象)。

四、实战:爬取豆瓣电影排行

(一)明确目标与分析网页

目标:爬取豆瓣电影排行榜的电影名称、上映时间、主演、评分等信息。网页分析:通过浏览器开发者工具查看元素结构,发现电影信息集中在class="pl2"的 div 标签和class="star clearfix"的评分区域。

(二)完整代码实现

import requests from bs4 import BeautifulSoup import json # 1. 设置请求头和目标URL headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1"} url = "https://movie.douban.com/chart" # 2. 获取网页内容 def get_html(url, headers): try: response = requests.get(url, headers=headers, timeout=10) if response.status_code == 200: response.encoding = response.apparent_encoding return response.text else: print(f"请求失败,状态码:{response.status_code}") return None except Exception as e: print(f"请求异常:{e}") return None # 3. 解析网页数据 def parse_html(html): soup = BeautifulSoup(html, "html.parser") movies = [] # 查找所有电影条目 items = soup.find_all("tr", class_="item") for item in items: # 提取电影名称 name_tag = item.find("div", class_="pl2").find("a") movie_name = name_tag.get_text(strip=True).replace("\n", "").replace("/", " / ") # 提取上映信息和主演 info_tag = item.find("p", class_="pl") info = info_tag.get_text(strip=True) release_time = info.split("/")[0].strip() actors = [actor.strip() for actor in info.split("/")[1:4] if actor.strip()] # 提取评分 rating_tag = item.find("span", class_="rating_nums") rating = rating_tag.get_text(strip=True) if rating_tag else "暂无评分" # 构建电影字典 movie_dict = { "电影名称": movie_name, "上映时间": release_time, "主演": actors, "评分": rating } movies.append(movie_dict) return movies # 4. 存储数据到JSON文件 def save_data(movies, filename="douban_movies.json"): with open(filename, "w", encoding="utf-8") as f: json.dump(movies, f, ensure_ascii=False, indent=2) print(f"数据已保存到{filename},共爬取{len(movies)}部电影") # 主函数执行 if __name__ == "__main__": html_content = get_html(url, headers) if html_content: movie_data = parse_html(html_content) if movie_data: save_data(movie_data)

(三)关键步骤解析

  1. 反爬处理:设置 User-Agent 伪装成浏览器,避免被服务器识别为爬虫;
  2. 标签定位:通过 find_all () 找到所有电影条目,再逐层提取子标签信息;
  3. 数据清洗:处理文本中的换行符和空格,规范数据格式;
  4. 数据存储:使用 JSON 格式存储,保证数据可读性和可扩展性。

五、总结与拓展

通过本次实战,我们掌握了 Python 爬虫的完整流程:从环境搭建、库的使用,到网页解析和数据存储。requests 库负责 “获取数据”,beautifulsoup4 库负责 “提炼数据”,两者结合可高效完成大多数静态网页的爬取任务。

后续拓展方向:

  • 爬取动态网页:学习 selenium 库模拟浏览器行为;
  • 批量爬取多页:通过构造 URL 参数实现分页爬取;
  • 数据可视化:使用 matplotlib 或 pandas 分析爬取的电影评分分布;
  • 进阶反爬:处理 Cookie、代理 IP 等复杂反爬机制。

爬虫技术的核心是 “遵循规则、尊重版权”,爬取数据时需遵守网站 robots 协议,避免过度请求给服务器造成压力。希望本文能帮助大家快速入门 Python 爬虫,在数据采集的世界中探索更多可能!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 7:22:20

智慧水厂物联网平台的应用功能

智慧水厂物联网平台以物联网、大数据、数字孪生等技术为核心,打破传统水厂“数据孤岛、响应滞后、管理粗放”的痛点,构建从原水取水、制水加工到输水供水的全流程智能化体系,实现生产自动化、管理精准化、决策数据化,全方位保障供…

作者头像 李华
网站建设 2026/5/11 14:59:53

AI云基础架构建设概述!

好的,这是一份关于 AI云基础架构建设 的综合性概述。它将从目标、核心层次、关键组件、建设挑战与趋势等方面进行系统性的阐述。 一、 建设目标与核心特征 AI云基础架构是为大规模人工智能工作负载(训练和推理)设计、优化和运营的专用云平台…

作者头像 李华
网站建设 2026/5/12 13:06:48

收藏!2026年程序员AI转型5大黄金赛道,从零基础到高薪实战指南

人工智能已深度嵌入国家战略布局,连续写入政府工作报告的背后,是产业数字化转型从“概念落地”迈向“价值深耕”的关键阶段。Gartner与智源研究院2026年报告均指出,AI已成为引领科技变革的核心引擎,多智能体系统、AI原生开发平台等…

作者头像 李华
网站建设 2026/5/9 16:09:31

AI定理证明器策略网络训练实战技巧

💓 博客主页:借口的CSDN主页 ⏩ 文章专栏:《热点资讯》 目录AI定理证明器策略网络训练实战技巧:从理论瓶颈到工程破局 一、策略网络:定理证明中的“智能导航仪” 二、训练核心挑战:为何“理论可行”难落地&…

作者头像 李华
网站建设 2026/5/6 2:22:14

二三维一体化方案终极对决:谁才是你的最佳选择

全球级项目选Cesium,城市级应用挑Mapbox,国内政企找超图……但真相真的如此简单吗?🤔🔍💥 在数字孪生、智慧城市大行其道的今天,二三维一体化已成为地理信息应用的标配需求。但面对市场上琳琅满目的技术方案,开发团队往往陷入选择困境: 到底该用哪个?哪个方案既强…

作者头像 李华