GitHub Trending 爬虫是一个自动化工具,用于定期抓取 GitHub 平台上的热门项目信息。该工具能够获取项目名称、编程语言、收藏数、分支数、项目描述等数据,并将英文描述翻译成中文,最终生成 CSV 格式的数据报告。
- 自动爬取 GitHub 热门项目列表
- 提供英文描述到中文的自动翻译功能
- 支持定时执行,可配置为每日固定时间运行
- 完整的日志记录系统,便于追踪程序运行状态
- 数据以 CSV 格式保存,方便后续分析和处理
- 编程语言:Python
- 主要依赖库:
- requests:处理 HTTP 请求
- BeautifulSoup4:解析 HTML 内容
- pandas:数据处理与 CSV 文件生成
- schedule:实现定时任务
- logging:日志管理
- 初始化配置和日志系统
- 定时触发爬虫任务
- 发送请求获取 GitHub Trending 页面
- 解析 HTML 提取项目数据
- 翻译项目描述(英文→中文)
- 将数据保存为 CSV 文件
- 等待下一次定时任务
主要翻译接口,接收英文文本并返回中文翻译结果。内部调用 translate_fallback 方法执行实际翻译操作。
实现了一个备用翻译方法,通过 Google Translate API 进行翻译:
- 使用 HTTP GET 请求访问 Google 翻译 API
- 设置源语言(英文)和目标语言(中文)
- 解析 JSON 响应获取翻译结果
- 处理可能出现的异常情况并记录日志
将字符串形式的数字转换为整数值:
- 支持处理带单位的数字,如 "1.5k"、"2.3m" 等
- 自动转换为对应的整数值(k=千,m=百万)
- 处理包含逗号的数字格式,如 "1,234"
实现了 GitHub 热门项目数据的爬取逻辑:
- 设置 User-Agent 头信息模拟浏览器访问
- 使用 BeautifulSoup 解析 HTML 页面内容
- 通过 CSS 选择器定位并提取各项目数据
- 提取信息包括:项目名称、编程语言、描述、收藏数、分支数、当日收藏数等
- 对英文描述进行中文翻译
- 将所有数据整合为结构化的列表返回
负责将爬取的数据保存为 CSV 文件:
- 使用当前日期命名文件(格式:github-trending-YYYY-MM-DD.csv)
- 使用 pandas DataFrame 进行数据结构化
- 采用 utf-8-sig 编码确保中文正确显示
- 返回保存状态,并记录相关日志
定义了单次执行的完整任务流程:
- 调用爬虫获取数据
- 将获取的数据保存为 CSV 文件
- 记录执行状态日志
程序入口函数,负责初始化并设置定时任务:
- 启动时立即执行一次爬虫任务
- 设置定时执行计划(每天 10:00)
- 进入循环,持续检查并执行待处理的定时任务
- 各功能模块都包含 try-except 结构,确保单点失败不影响整体运行
- 网络请求异常处理:捕获连接超时、服务器错误等情况
- 数据解析异常处理:应对页面结构变化导致的选择器失效
- 翻译服务异常处理:处理翻译 API 访问受限或响应异常
- 采用 Python 标准 logging 模块实现多级日志
- 日志同时输出到文件和控制台
- 记录包括:INFO(正常操作日志)、WARNING(警告信息)、ERROR(错误信息)
- 日志内容包含时间戳、日志级别和详细信息
- Python 3.6 或更高版本
- 依赖包:requests, beautifulsoup4, pandas, schedule
pip install requests beautifulsoup4 pandas schedule直接执行 Python 脚本:
python github_trending_scraper.py可根据需要修改以下配置:
- 定时执行频率:修改
schedule.every().day.at("10:00").do(job)部分 - 日志级别:调整
logging.basicConfig()中的 level 参数
生成的 CSV 文件包含以下字段:
- 项目名称:GitHub 仓库全名(用户名/仓库名)
- 使用语言:项目主要编程语言
- 收藏数:项目总 Star 数
- 分支数:项目 Fork 数量
- 描述:原始英文项目描述
- 中文描述:翻译后的中文项目描述
- 当日收藏:24 小时内新增的 Star 数
日志文件 github_trending_scraper.log 记录程序运行的完整过程,包括:
- 启动和结束信息
- 数据抓取状态
- 翻译过程
- 文件保存结果
- 异常和错误信息
- 请求频率限制:过于频繁的请求可能导致 GitHub 临时封禁 IP
- 页面结构变化:GitHub 界面更新可能导致选择器失效,需及时更新
- 翻译服务限制:Google 翻译 API 可能有使用频率限制
- 无登录状态:当前实现不支持访问需要登录的内容
- 添加多语言支持,允许将描述翻译为更多语种
- 实现多页数据抓取,获取更全面的热门项目信息
- 增加代理 IP 池,避免请求频率限制
- 支持更多数据导出格式,如 JSON、Excel 等
- 开发 Web 界面,便于可视化查看和配置
- requests >= 2.25.0
- beautifulsoup4 >= 4.9.3
- pandas >= 1.1.5
- schedule >= 1.0.0
- GitHub Trending 页面:https://github.com/trending
- Google Translate API 文档:https://cloud.google.com/translate