一个基于Github API官方API代理来实现的易用采集器,面向开发者、安全工程师、数据分析人员等。
完全兼容Github官方API接口的同时支持多Token的自动切换,可以通过参数配置,简单实现数据的批量爬取等复杂功能。
无论你是项批量爬取识别企业代码信息泄露,还是通过Github采集CVE漏洞情报数据,又或是批量分析挖掘追踪你需要的项目信息等等,都能帮你轻松搞定!
配合airflows 可以成为N8N等编排任务数据源,通过LLM自动对Github内的数据进行智能分析。典型的,例如每个CVE漏洞自动调用GithubGather获取包含该漏洞的最新代码全部内容,然后大模型分析挖掘漏洞POC等。
- API:完全兼容Github官方API调用方式,不用担心存在接口不支持,可参考官方API调用示例。
- Token轮换:Github存在严格流控,自动多Token轮换,再也不怕被限速。
- 深度爬取:代码搜索等,一次最多返回100条数据,项目支持自动翻页功能,一次性拿下所有分页数据。
- 字段过滤:可以选择只返回你需要的字段,让数据更清晰,提升性能。
- 联动请求:一次请求,多个API联动,数据收集更高效(例如爬用户下的所有项目的Readme信息)。
- Docker部署:一键启动。
docker run --name githubgather -d -e GITHUB_TOKENS='token1,token2,token3,token4,token5,token6,token7' -p 9000:9000 registry.cn-hangzhou.aliyuncs.com/aiflows/githubgather:latest
docker build -t githubgather .
docker run --name githubgather -d -e GITHUB_TOKENS='token1,token2,token3,token4,token5,token6,token7' -p 9000:9000 githubgather
git clone https://github.com/xu-xiang/GithubGather.git
cd GithubGather
pip install -r requirements.txt
export GITHUB_TOKENS='token1,token2,token3,token4,token5,token6,token7'
uvicorn app.main:app --host 0.0.0.0 --port 9000
GithubGather 不仅功能强大,而且超级易用。只需几个简单的 HTTP 请求,你就能轻松获取大量 GitHub 数据。下面是一些常用的例子,快试试看吧!
GET http://localhost:9000/users/{{username}}
Content-Type: application/json
GET http://localhost:9000/repos/{{username}}/{{repo}}
Content-Type: application/json
- 描述:自动翻页获取目标接口的所有数据,无需手动处理多页数据。
- 用法:在请求中添加
?deep_fetch=true
参数。 - 适用场景:当您需要从具有多页数据的 GitHub API 接口中获取全部数据时,如获取某个用户的所有仓库、所有 star 项目等。
GET http://localhost:9000/users/{{username}}/repos?deep_fetch=true&per_page=100
Accept: application/json
GET http://localhost:9000/users/{{username}}/starred?deep_fetch=true&per_page=100
Content-Type: application/json
- 描述:控制每次请求返回的数据量。
- 用法:在请求中添加
&per_page=<number>
参数,其中<number>
是您希望每页返回的项目数量。 - 默认值:GitHub API 默认每页返回 30 项数据,为了提升爬取效率,本项目默认使用最大值100,可通过该参数调小。
- 适用场景:在使用深度爬取功能时,通过调整每页数据量,可以加快数据爬取速度或更精细地控制返回的数据量。
- 描述:限制深度爬取时的最大翻页数量。
- 用法:在请求中添加
&max_pages=<number>
参数,其中<number>
是最大的翻页次数。 - 适用场景:在深度爬取大量数据时,限制数据量,避免过多的请求。
GET http://localhost:9000/users/{{username}}/repos?deep_fetch=true&per_page=1&max_pages=2
Accept: application/json
- 描述:在搜索代码时,返回带有高亮的代码片段,典型的代码数据泄露检测等场景。
- 用法:在请求中添加
&highlight_code=true
参数,以启用代码高亮功能,默认为false。 - 适用场景:当您需要在搜索结果中快速定位和理解代码时,这个功能尤其有用。
GET http://localhost:9000/search/code?q=python+async&highlight_code=true
Content-Type: application/json
- 描述:在一次请求中执行多个 API 调用,将多个请求的数据聚合在一起返回。
- 用法:在请求中添加
&linked_<resource>=<endpoint>
参数,例如&linked_readme=/repos/{full_name}/readme
。 - 动态值:可以使用
{}
中的动态值从第一次请求的结果中提取数据。 - 适用场景:获取关联数据,如获取用户的所有仓库及其 README 文件。
GET http://localhost:9000/users/{{username}}/repos?linked_readme=/repos/{full_name}/readme
- 描述:仅获取特定的数据字段。
- 用法:在请求中添加
&fields=<field1>,<field2>
参数,其中<field1>
,<field2>
等是您希望获取的字段名称。 - 适用场景:减少返回的数据量,专注于您关心的信息,如只获取用户的登录名和贡献数。
GET http://localhost:9000/search/repositories?q=machine+learning&deep_fetch=true&fields=items.name,items.description
Accept: application/json
返回数据示例
{
"items": [
{
"description": "A curated list of awesome Machine Learning frameworks, libraries and software."
},
{
"description": "Basic Machine Learning and Deep Learning"
}
...
]
}
更多示例可参考: test_cases.http
API调用可参考Github官方文档( 均可进行高性能采集代理): GithubAPI
GITHUB_TOKENS
: 在环境变量中配置多个Token,自动切换,提升效率。
DEEP_FETCH_MAX_PAGES
: 设定深度爬取的最大页数限制,默认15。
TOTAL_COUNT_LIMIT
: GitHub API 搜索结果上限(确保Github官方API的确允许更高才能调整,截止20240105官方最高只能翻页获取1000条记录)默认1000
MAX_RETRIES
: 最大重试次数,默认2
配置文件可参考:config.py
发现了 Bug?有新鲜想法?加入我们一起改进 GithubGather 吧!
Fork 我们的仓库。 切换到一个新分支 (git checkout -b cool-new-feature)。 提交你的修改 (git commit -am 'Add some cool feature')。 推送到分支 (git push origin cool-new-feature)。 提交一个 Pull Request。
采用 MIT 许可证,详情见 LICENSE 文件。
遇到问题?不清楚怎么使用?随时欢迎你提出 issues 或者直接联系我们!