AI数据采集教程:零基础搭建可运行的采集脚本
AI 数据采集的核心是用脚本自动从网页或接口获取结构化数据。
对零基础用户来说,最省事的路径是先跑通一个最小采集脚本,再逐步加分页、清洗和保存逻辑。
下面以 Python 为例,从环境准备到结果验证完整走一遍,所有命令和配置都可以直接复制执行。
先确认采集目标和环境条件
开始写代码前,先明确三件事:数据在哪个页面、页面是静态渲染还是接口返回、目标站点是否允许采集。
打开浏览器开发者工具(按 F12),切到 Network 面板,刷新目标页面,观察是否有返回 JSON 的 XHR 请求。
如果有,优先采集接口,比解析 HTML 稳定得多。
环境方面需要一台能联网的电脑,安装 Python 3.8 及以上版本。
在终端执行 python3 --version 确认版本,然后安装两个依赖:
pip install requests beautifulsoup4
requests 负责发 HTTP 请求,beautifulsoup4 用于解析 HTML。
如果目标数据来自接口,只需要 requests。
编写第一个可运行的采集脚本
新建文件 collect.py,先写一个最小可运行版本,采集单页数据并打印结果:
import requests
url = "https://目标站点/api/list"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status()
data = resp.json()
print(data)
运行 python3 collect.py,如果终端输出 JSON 内容,说明网络和接口都通了。
如果报 403,通常是缺少 User-Agent 或需要登录 Cookie;
如果报 timeout,先检查网络和接口地址是否正确。
单页跑通后,再加分页循环。
大多数接口用 page 参数翻页,可以写成:
all_items = []
for page in range(1, 6):
params = {"page": page, "size": 20}
resp = requests.get(url, headers=headers, params=params, timeout=10)
resp.raise_for_status()
items = resp.json().get("data", [])
if not items:
break
all_items.extend(items)
print(f"第 {page} 页采集 {len(items)} 条")
每页之间建议加 time.sleep(1),避免请求过密触发限流。
把采集结果保存成可用文件
采集到的数据要落盘才算完成。
用 json 模块保存,方便后续导入分析工具:
import json
with open("result.json", "w", encoding="utf-8") as f:
json.dump(all_items, f, ensure_ascii=False, indent=2)
如果数据量较大,可以边采边追加写入,而不是全部堆在内存里。
保存后打开 result.json,检查字段是否完整、中文是否乱码。
出现乱码时,确认写入时指定了 encoding="utf-8"。
常见报错与避坑要点
采集过程中最容易踩的坑集中在请求头和频率控制上。不要伪造登录态去采集需要授权的内容,只采集公开可访问的数据。
遇到 429 状态码说明请求太频繁,应降低频率或暂停一段时间。
另一个常见问题是接口参数变化。
页面改版后原来的 page 参数可能失效,表现为始终返回第一页数据。
排查方法是手动在浏览器里改参数对比返回结果,确认分页字段名。
如果采集 HTML 页面而不是接口,解析前先保存一份原始 HTML 到本地,用 resp.text 写入文件,再对照结构写选择器,比反复请求线上页面效率高。
验证采集是否真正成功
验证分三层:第一,脚本运行无异常退出;
第二,result.json 文件存在且大小合理;
第三,随机抽查几条记录,与网页上看到的内容比对字段值。
可以用一行命令快速统计条数:
python3 -c "import json; print(len(json.load(open('result.json'))))"
如果条数与预期页数乘以每页数量接近,说明分页逻辑正常。
若明显偏少,回看循环里的 break 条件是否触发过早。
关于采集频率和合规的提醒
采集前查看目标站点的 robots.txt 和服务条款,确认允许的范围。
控制请求间隔、不采集个人隐私字段、不绕过登录和验证码,是基本底线。
本文示例只覆盖公开数据的最小采集流程,实际项目中应根据站点规则调整频率和字段范围。
跑通上面这套流程后,你可以继续扩展:用 pandas 做数据清洗、用定时任务每天自动执行、或者把结果写入数据库。
建议先保证单次采集稳定,再考虑自动化和规模化。