基于 Rust 实现爬取 GitHub Trending 热门仓库
本次实战将使用 Rust 构建一个异步爬虫,目标是抓取 GitHub Trending 页面中热门 Rust 仓库的详细信息(包括仓库名、描述、星标数、作者等),并将结果导出为 JSON 文件。代码重点优化了错误处理机制与 CSS 选择器的稳定性,确保在 GitHub 页面结构微调时仍能正常运行。
技术选型
- HTTP 请求:
reqwest(Rust 最流行的异步 HTTP 客户端) - HTML 解析:
scraper(支持 CSS 选择器,轻量高效) - JSON 序列化:
serde+serde_json(标准序列化库) - 异步运行时:
tokio(Rust 异步编程的事实标准) - 日志与错误:
env_logger+anyhow(简化调试与错误传递)
项目结构
github-trending-crawler/
├── Cargo.toml # 依赖配置
├── src/
│ └── main.rs # 核心逻辑
└── trending_repos.json # 输出结果
环境搭建与依赖配置
首先初始化项目并进入目录:
cargo new github-trending-crawler
cd github-trending-crawler
接着在 Cargo.toml 中添加必要的依赖。这里推荐使用较新的稳定版本,具体可参考 crates.io 查询最新信息:
[package]
name = "github-trending-crawler"
version = "0.1.0"
edition = "2021"
description = "A crawler to fetch GitHub Trending Rust repositories"
license = "MIT"
[dependencies]
# HTTP 客户端(异步)
reqwest = { version = "0.12", features = ["json", "rustls-tls"] }
# HTML 解析(CSS 选择器)
scraper = "0.18"
# JSON 序列化/反序列化
serde = { version = , features = [] }
=
= { version = , features = [] }
=
=
=


