news 2026/4/16 16:38:05

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/4/16 13:05:26

超薄芯板小尺寸PCB层压翘曲矫正与平整度管控

小尺寸 PCB 多采用 4–8 层叠构,为实现产品超薄化,芯板厚度常控制在 50–100μm,超薄芯板层压翘曲,是行业内普遍存在的技术难题。作为 PCB 制程工程师,我在多款微型车载 PCB、医疗便携式设备 PCB 的项目开发中&#xf…

作者头像 李华
网站建设 2026/4/16 13:00:16

msdatrep.ocx文件丢失找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/16 14:48:58

西门子平台数据采集API接口正式发布:赋能全场景数据高效协同

为破解工业现场与电商场景数据采集的碎片化、低效率、兼容性难题,西门子正式发布全新平台数据采集接口,实现从工业设备信号到电商商品详情的全链路数据统一采集、标准化传输与安全管控。该接口深度整合西门子工业自动化生态与数字商务体系,兼…

作者头像 李华
网站建设 2026/4/16 12:22:16

家政预约小程序源码系统的核心功能,直接连接海量用户

温馨提示:文末有资源获取方式家政行业走向线上化、标准化已是不可逆转的趋势。一个优秀的小程序,能够成为服务提供者最得力的数字助手,直接连接海量微信用户,解决获客难、管理乱、信任度低等核心痛点。近期,一款专注于…

作者头像 李华
网站建设 2026/4/16 13:26:18

langchain怎么构造agant

使用 LangChain 构造 Agent(智能体)现在已经变得非常简单,尤其是随着 LangChain 1.0 版本的发布,API 更加统一和易用。你可以根据你的需求选择不同的复杂度。最简单的方式,只需要几行代码就能让大模型“动起来”。这里…

作者头像 李华
网站建设 2026/4/16 15:32:56

区块链应用UI自动化测试的特殊挑战与应对策略

区块链技术的去中心化和不可篡改性为应用开发带来革命性变革,但同时也为UI自动化测试引入独特难题。与传统Web应用不同,区块链UI测试需处理多节点交互、数据一致性保障和安全验证等复杂场景,这对测试从业者的工具选择和策略设计提出更高要求。…

作者头像 李华