在人工智能领域,数据质量直接决定了模型的上限。尤其是针对代码类任务的微调或预训练,构建高质量、结构化的数据集是核心挑战之一。面对这一需求,通常有两种主流路径:一是基于动态住宅代理配合脚本的手动定制方案,二是利用 Web Scraper API 工具的自动化方案。本文将结合 GitHub Issues 采集案例,对比这两种方式的实现细节与适用场景。
第一种方式:传统方式 - 动态住宅代理 + 手动处理
尽管自动化工具层出不穷,但在目标数据结构复杂或需要深度清洗的场景下,手动控制依然不可替代。以采集 GitHub 仓库的 Issue 数据为例,我们需要解决 IP 封禁和 API 频率限制问题。
1. 使用动态住宅代理实现高效抓取
动态住宅代理通过切换真实用户 IP 地址池,模拟正常访问行为,能有效规避反爬机制。操作时,选择可靠的代理服务商并创建账户,配置代理池规则即可。
- 步骤一:注册代理服务账号。
- 步骤二:在控制台创建通道,设置 IP 分配策略。
- 步骤三:获取代理凭证(IP:Port),集成到请求头中。
![配置代理池界面]
2. 分页读取数据并规避 API 限制
GitHub API 对请求频率有限制,建议采用分页拉取策略。通过 page 和 per_page 参数逐步获取数据,避免单次请求过大导致被封。
3. 数据清洗与格式转换
原始数据多为 JSON 格式,需提取关键字段并转换为模型训练所需的 JSONL 格式。以下 Python 脚本演示了完整的流程:从发起请求、翻页循环,到字段提取与文件保存。
import requests
import json
import pandas as pd
# 配置代理
proxy = {
"http": "http://your_proxy_ip:port",
"https": "http://your_proxy_ip:port"
}
# GitHub Issues API 基础 URL
base_url = "https://api.github.com/repos/yangzongzhuan/RuoYi/issues"
params = {
"state": "closed",
"per_page": 30,
"page": 1
}
headers = {"Accept": "application/vnd.github.v3+json"}
all_issues = []
# 循环翻页
while True:
response = requests.get(base_url, proxies=proxy, headers=headers, params=params)
if response.status_code == 200:
issues_data = response.json()
if issues_data:
issue issues_data:
issue_info = {
: issue[],
: issue[],
: issue[],
: issue[],
: issue[],
: issue[],
: issue[][],
: issue[],
: [label[] label issue[]]
}
all_issues.append(issue_info)
params[] +=
:
()
df = pd.DataFrame(all_issues)
df.to_csv(, index=, encoding=)
(, , encoding=) f:
issue all_issues:
f.write(json.dumps(issue, ensure_ascii=) + )
()


