本项目采用了GitHub官方的api,提供从指定repo爬取关注者(stargazers)的id和邮箱信息的功能。
由于匿名调用官方的api的访问限制条件苛刻(匿名用户每小时60次,参考Rate Limiting),为了保持爬取脚本的顺利运行,本项目要求用户自行申请token,获取了token之后通过简单的配置即可运行。
- 系统环境:Linux, MacOS, Windows
- python3.7+
-
Clone本项目代码
git clone https://github.com/KPatr1ck/github_stargazers_crawler
-
安装依赖
pip install -r requirements.txt
-
登陆GitHub,获取token。
-
用
*.json
格式文件配置token和需要爬取的repos地址。{ "token": "Your token", "repos": { "Repo1": "https://github.com/url_of_repo1", "Repo2": "https://github.com/url_of_repo2" } }
注意:
- "token"和"repos"都是必填的键值对
- "repos"中最少要有一个元素
- "repos"里嵌套的键值对中,repo的名字可以任取(示例的"Repo1"和"Repo2")
-
脚本运行和参数
python main.py --repos ./repos.json --output_dir ./output --num_workers 64 --api_limit_threshold 200
参数:
- repos: 必填,值为上述配置文件的路径。
- output_dir: 可选,爬取结果文件的存储路径,默认为
./output
。 - num_workers: 可选,爬虫的线程数,默认为100。
- api_limit_threshold: 可选,当前token的访问限制小于此值时,工作线程进入睡眠,1小时后再继续爬取数据,默认为200。
运行后将在输出目录中生成关注者名单*.txt
和邮箱信息*.csv
文件。
[注意]即使使用token,每小时也存在访问限制。当访问限制低于阈值时,工作线程会睡眠1小时后再继续工作。因此,如果爬取的数量过大时,需要等待较长时间。
- 支持多个token切换。