python网络爬虫实战-数据保存

大家好,我是python网络爬虫这门课程的主要讲师geo

为什么在爬虫课程中必须讲数据保存

许多初学者在学习网络爬虫时,会将注意力几乎全部放在请求是否成功、反爬是否绕过、网页是否能解析。但在真实项目中,爬虫只是整个数据流程中最短暂的一步。

如果抓到的数据没有被正确保存,那么这些数据无法复用、无法分析,也无法作为资产积累。每一次分析都要重新爬取,不仅浪费时间,也容易触发封锁机制。

从工程角度来看,爬虫负责的是数据获取,数据保存负责的是数据资产管理。一个不能稳定保存数据的爬虫系统,在商业与研究环境中几乎没有价值。


网络爬虫中的数据生命周期

一个完整的数据流程包括以下阶段:

网页或 API 提供原始数据
↓
通过 HTTP 请求获取响应
↓
解析 HTML 或 JSON 内容
↓
将解析结果转为 Python 中的结构化数据
↓
将结构化数据保存为文件或数据库
↓
后续进行清洗、分析、建模或可视化

本讲稿的核心关注点,是结构化数据到长期存储这一阶段。


爬虫中常见的数据形态

在实际爬虫项目中,保存的数据并不只有一种类型。

最常见的是文本数据,例如新闻标题、商品名称、文章内容、评论文字。这类数据在 Python 中通常以字符串形式存在。

其次是数值数据,例如价格、评分、浏览量、金融市场中的开盘价和收盘价。这类数据需要注意类型转换,确保保存时保持数值属性。

第三类是结构化数据,通常表现为字典或由字典组成的列表。几乎所有实际爬虫项目最终都会将数据整理成这种形式。

最后是嵌套或半结构化数据,例如评论中包含用户信息、商品中包含规格列表。这类数据非常适合使用 JSON 或 NoSQL 数据库保存。


使用 TXT 文件保存数据的教学场景

TXT 是最基础的保存方式,也是教学中最早可以引入的方式。它的主要用途并不是最终数据存储,而是调试、验证与保留原始内容。

在教学中,TXT 非常适合用来保存原始 HTML,帮助学生理解网页结构,也便于排查解析错误。

with open("test.txt", "w", encoding="utf-8") as f:
    f.write("Hello, file!")

CSV 文件在爬虫教学中的核心地位

CSV 是网络爬虫教学中最重要的文件格式之一。它兼容 Excel,能直接被 Pandas 读取,是数据分析和机器学习的标准输入格式。

在教学中,可以将 CSV 视为“二维表格数据”的标准表示方式。每一行是一条记录,每一列是一个字段。

import csv

data = [
    ["Name", "Age"],
    ["Alice", 30],
    ["Bob", 25]
]

with open("test.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerows(data)

pandas

import pandas as pd

df = pd.DataFrame(data)
df.to_csv("products.csv", index=False, encoding="utf-8-sig")

使用 JSON 保存爬虫数据的实践方式

JSON 是网络爬虫中最自然、最常见的数据保存格式。大量网页接口本身就是以 JSON 形式返回数据,因此在很多场景下,爬虫只是做了“转存”工作。

JSON 能够自然地表达嵌套结构,非常适合保存复杂对象,例如商品详情、用户信息、评论列表等。

import json

data = {"name": "Alice", "age": 30}

with open("test.json", "w", encoding="utf-8") as f:
    json.dump(data, f)

网络爬虫数据保存的核心观念总结

在爬虫课程中,最终必须建立一个清晰的认知:爬虫只是手段,数据才是目标。

真正有价值的能力,不是写出一个能跑的爬虫脚本,而是设计一个稳定、可扩展、可复用的数据存储体系。

一个优秀的爬虫工程师,应该随时清楚自己的数据存在哪里、以什么结构保存、未来如何被使用。


还能保存成下列的资料类型

文本与数据类

文件类型 描述 模块/方法
.txt 普通文本 open(..., "w")
.json JSON 数据 json.dump()
.csv 表格数据 csv.writer()
.xml XML 数据 xml.etree.ElementTree
.yaml / .yml 配置数据(类似 JSON) PyYAML 模块
.ini 配置文件(键值对) configparser

数据分析 / 科学计算

文件类型 描述 模块/方法
.xlsx / .xls Excel 文件 openpyxl, pandas, xlwt
.h5 HDF5 数据文件 h5py, pandas
.parquet 列式存储文件(大数据) pyarrow, pandas
.pkl / .pickle Python 对象序列化 pickle.dump()

图片与图形类

文件类型 描述 模块/方法
.png, .jpg 图片文件 PIL.Image.save()
.svg 矢量图形 svgwrite, matplotlib
.pdf PDF 文件 reportlab, fpdf, PyPDF2(读取)

音频 / 视频 / 压缩

文件类型 描述 模块/方法
.mp3, .wav 音频文件 pydub, wave, scipy.io.wavfile
.mp4, .avi 视频文件 moviepy, opencv
.zip, .tar.gz 压缩包 zipfile, tarfile

机器学习 / 模型存储

文件类型 描述 模块/方法
.pkl 存储模型对象 pickle
.joblib 存储大模型(更高效) joblib.dump()
.h5 Keras 模型权重 model.save("model.h5")
.onnx 通用神经网络格式 onnx.save()