返回博客列表

Kenshi Wiki 数据爬取:匿名爬虫与数据清洗

对 Kenshi 游戏维基数据的系统性爬取、清洗与整理,构建结构化的游戏知识数据集。

#Python#Web Scraping#Data#Proxy#Kenshi

项目背景

Kenshi 拥有丰富的游戏内容,其 Wiki 是玩家获取信息的重要来源。本项目对 Kenshi 游戏 Wiki 进行系统性数据采集,涵盖阵营(factions)、世界书(worldbook)等核心游戏数据,为后续的游戏分析工具提供数据支撑。

技术挑战

反爬虫对抗

Wiki 平台通常有反爬虫机制,需要多层匿名保护:

层级方案
指纹伪装curl_cffi 模拟 Chrome 131 TLS 指纹
IP 隐藏免费代理池自动轮换,支持 Tor 网络
行为模拟2-5 秒智能延迟 + 30% 概率人类长延迟
失效恢复自动检测并移除失效代理,自动重试

爬虫实现

from curl_cffi import requests
 
# 模拟 Chrome 131 TLS 指纹
session = requests.Session(impersonate="chrome131")
 
def crawl_page(url, proxy=None):
    proxies = {"http": proxy, "https": proxy} if proxy else None
    response = session.get(url, proxies=proxins, timeout=30)
    return response.text

多轮爬取策略

采用渐进式策略确保数据覆盖完整:

快速爬取 → 安全爬取 → 深度爬取 → 链接发现 → 补充爬取

各轮次目标

轮次目标特点
快速爬取主要页面短延迟,快速覆盖
安全爬取重要页面长延迟,确保成功
深度爬取详细内容解析子页面
链接发现新发现的链接扩大覆盖范围
补充爬取失败重试填补遗漏

数据清洗流程

def clean_data(raw_data):
    # 1. 合并多轮爬取结果
    all_pages = merge_crawl_results(raw_data)
 
    # 2. 去重(基于页面标题与内容哈希)
    unique_pages = deduplicate(all_pages)
 
    # 3. 清洗无效字段
    cleaned = clean_fields(unique_pages)
 
    # 4. 格式统一
    return normalize_structure(cleaned)

清洗步骤

  1. 加载合并:将多轮爬取结果加载并合并
  2. 去重处理:基于页面标题与内容哈希去重
  3. 字段清洗:移除无效字段,统一格式
  4. 结构化输出:生成 JSON 数据集

输出成果

文件内容
all_factions.json阵营结构化数据
kenshi_worldbook.json世界书条目
kenshi_full_data.json完整数据集
kenshi_clean_database/清洗后的分类输出

使用方法

# 安装依赖
pip install curl_cffi beautifulsoup4
 
# 运行爬虫
python run_safe_crawl.py
 
# 数据清洗
python clean_and_merge.py

注意事项

  • 请遵守 Wiki 的 robots.txt 和使用条款
  • 建议在非高峰时段运行爬虫
  • 数据仅供学习和研究使用

相关链接


最后更新: 2026-03-26