爬虫数据存储全攻略:从 Robots 协议到文件存储
爬虫在获取网页数据后,如何高效、合规地存储数据?这是爬虫开发的关键环节。本文将从爬虫的 “行为规范”(Robots 协议)讲起,详细介绍两种常用的文件存储方式(TXT、CSV),并附 Python 实战代码,帮你搞定数据存储的全流程。
一、爬虫的 “潜规则”:Robots 协议
在爬取数据前,首先要遵守 Robots 协议(机器人协议),这是网站与爬虫之间的 “约定”,避免因违规爬取引发法律风险或服务器负载问题。
什么是 Robots 协议?
它是一个名为robots.txt
的文本文件,放在网站根目录下,用于告诉爬虫:哪些页面可以爬,哪些不行。例如京东的robots.txt
会限制某些路径的爬取(如/pinpai/*.html
)。协议内容怎么看?
核心规则由User-agent
(目标爬虫)、Disallow
(禁止爬取的路径)、Allow
(允许爬取的路径)组成。
示例(某网站的robots.txt
):User-agent: * # 对所有爬虫生效 Disallow: /cgi-bin/ # 禁止爬取 /cgi-bin/ 目录 Disallow: /tmp/ # 禁止爬取 /tmp/ 目录 Allow: /public/ # 允许爬取 /public/ 目录
如何查看网站的 Robots 协议?
直接在网站域名后加/robots.txt
,例如:- 百度:
https://www.baidu.com/robots.txt
- 京东:
https://www.jd.com/robots.txt
- 百度:
必须遵守吗?
协议本身不具备法律强制性,但违规可能面临法律风险(如侵犯数据产权)或被网站封禁 IP,建议遵守。
二、TXT 文件存储:简单直接的 “入门款”
TXT 是最基础的文件存储格式,适合存储结构化不强的文本数据(如网页源码、日志)。
优缺点分析
- 优点:操作简单,兼容所有平台,适合快速保存数据;
- 缺点:检索困难,不适合存储表格类数据(如多字段的列表)。
Python 操作 TXT 文件
用内置的open()
函数即可实现读写,关键是掌握 文件打开模式:模式 功能描述 r
只读(文件不存在则报错) w
写入(覆盖原有内容,文件不存在则创建) a
追加(在文件末尾添加内容,文件不存在则创建) r+
读写(文件不存在则报错) a+
读写(追加模式) 示例(爬取网页并保存为 TXT):
import requests# 爬取网页内容 url = "http://www.cqie.edu.cn/html/2/xydt/" response = requests.get(url) response.encoding = "utf-8" # 解决中文乱码# 保存到 TXT with open("news.html", "w", encoding="utf-8") as f:f.write(response.text) # 写入网页源码
技巧
- 多字段数据可用
\t
(制表符)分隔,便于后续解析; - 路径推荐用绝对路径(如
D:/data/news.txt
),避免路径错误。
- 多字段数据可用
三、CSV 文件存储:表格数据的 “最佳拍档”
CSV(逗号分隔值)是存储结构化数据的理想格式,本质是纯文本,但以表格形式组织(类似 Excel),可被 Excel、Python 等工具直接解析。
优缺点分析
- 优点:结构化清晰,支持多字段,可被 Excel 打开,适合存储列表类数据(如用户信息、商品列表);
- 缺点:功能简单,不支持公式或单元格样式。
Python 操作 CSV 文件
用标准库csv
或第三方库pandas
实现,后者更简洁。方法一:用
csv
库
示例(写入学生信息):import csv# 写入 CSV with open("students.csv", "w", encoding="utf-8", newline="") as f:writer = csv.writer(f)writer.writerow(["学号", "姓名", "年龄"]) # 标题行writer.writerow(["2023001", "张三", 20])writer.writerow(["2023002", "李四", 19])
方法二:用
pandas
库
适合处理大量数据,支持直接转为 DataFrame 操作:import pandas as pd# 数据字典 data = {"学号": ["2023001", "2023002"],"姓名": ["张三", "李四"],"年龄": [20, 19] } # 转为 DataFrame 并保存 df = pd.DataFrame(data) df.to_csv("students_pandas.csv", index=False) # index=False 去除行索引
实战案例:爬取新闻列表并存储为 CSV
步骤:- 爬取网页源码;
- 用
lxml
解析出新闻标题、链接; - 写入 CSV 文件。
核心代码:
import requests from lxml import etree import csvurl = "http://www.cqie.edu.cn/html/2/xydt/" response = requests.get(url) html = etree.HTML(response.text)# 解析新闻标题和链接 titles = html.xpath("//a[@class='news-title']/text()") links = html.xpath("//a[@class='news-title']/@href")# 写入 CSV with open("news.csv", "w", encoding="utf-8", newline="") as f:writer = csv.writer(f)writer.writerow(["标题", "链接"])for title, link in zip(titles, links):writer.writerow([title, link])
四、如何选择存储方式?
- 临时保存、非结构化数据(如网页源码)→ 选 TXT;
- 结构化数据(多字段列表)、需要后续分析 → 选 CSV;
- 大量数据或需要复杂查询 → 考虑数据库(如 MySQL、MongoDB)。
小结
数据存储是爬虫开发的 “收尾工作”,既要遵守 Robots 协议确保合规,也要根据数据特点选择合适的存储格式。TXT 简单直接,CSV 适合表格数据,掌握这两种方式,足以应对大部分爬虫场景。下次我们将探讨数据库存储,带你处理更复杂的数据分析需求。