当前位置: 首页 > ai >正文

github公开项目爬取

import requestsdef search_github_repositories(keyword, token=None, language=None, max_results=1000):"""通过 GitHub API 搜索仓库,支持分页获取所有结果(最多 1000 条):param keyword: 搜索关键词:param token: GitHub Token(可选,但建议使用以提高速率限制):param language: 过滤语言:param max_results: 最大结果数(GitHub 允许最多 1000 条):return: 仓库列表"""url = "https://api.github.com/search/repositories"headers = {"Accept": "application/vnd.github.v3+json"}if token:headers["Authorization"] = f"Bearer {token}"query = keywordif language:query += f" language:{language}"repositories = []page = 1per_page = 100  # GitHub 单页最大允许 100 条while len(repositories) < max_results:params = {"q": query,"sort": "stars","order": "desc","page": page,"per_page": per_page}try:response = requests.get(url, headers=headers, params=params)response.raise_for_status()data = response.json()# 检查是否还有更多结果if not data.get("items"):breakfor item in data["items"]:repo_info = {"name": item["name"],"owner": item["owner"]["login"],"url": item["html_url"],"clone_url": item["clone_url"],"description": item["description"],"language": item["language"],"stars": item["stargazers_count"]}repositories.append(repo_info)# 达到用户指定的最大数量时停止if len(repositories) >= max_results:breakpage += 1# GitHub 最多允许 10 页(即 10 * 100=1000 条)if page > 10:breakexcept requests.exceptions.RequestException as e:print(f"请求失败: {e}")breakreturn repositoriesdef save_to_txt(results, filename="github_results.txt"):"""将结果保存到文本文件:param results: 仓库列表:param filename: 保存文件名"""with open(filename, "w", encoding="utf-8") as f:for repo in results:# 格式化单行文本(用 | 分隔关键信息)line = (f"仓库: {repo['owner']}/{repo['name']} | "f"URL: {repo['url']} | "f"语言: {repo['language']} | "f"星数: {repo['stars']} | "f"克隆地址: {repo['clone_url']}\n")f.write(line)print(f"结果已保存至 {filename}")# 示例用法
if __name__ == "__main__":keyword = "Aerospace Control"language = "Python"token = "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"  # 强烈建议使用 Token# 获取最多 1000 条结果(实际数量取决于搜索匹配的总数)results = search_github_repositories(keyword, token, language=language, max_results=1000)if results:print(f"找到 {len(results)}{language} 相关仓库:")for idx, repo in enumerate(results, 1):print(f"\n{idx}. {repo['owner']}/{repo['name']}")print(f"   URL: {repo['url']}")print(f"   语言: {repo['language']}")  # 显示语言print(f"   克隆地址: {repo['clone_url']}")else:print("未找到结果")if results:save_to_txt(results)print(f"实际获取 {len(results)} 条结果")else:print("未找到结果")
http://www.xdnf.cn/news/8612.html

相关文章:

  • SMT贴片机操作核心步骤精要
  • 在kali中搞个jdk1.8.,又不破坏环境
  • Python猜拳“小”游戏
  • 动态IP:像变色龙一样自由切换网络身份
  • 【编程语言】【C语言】一篇文件构建C语言知识体系
  • 神经算子与FNO技术详解
  • 几种环境下的Postgres数据库安装
  • docker commit除了提交容器成镜像,还能搞什么之修改cmd命令
  • 全面指南:使用Node.js和Python连接与操作MongoDB
  • 汉字不仅是一种语言 还是当作艺术形式来展现
  • 基于Springboot + vue3实现的中国戏曲文化传播系统
  • Linux环境变量与地址空间
  • 冰箱热交换的原理以及如何加氟
  • 超越OpenAI CodeX的软件工程智能体:Jules
  • Axure元件动作六:设置图片
  • 高分辨率北半球多年冻土数据集(2000-2016)
  • 科学计算中的深度学习模型精解:CNN、U-Net 和 Diffusion Models
  • 【KWDB 创作者计划】KWDB单机性能测试:从零开始的详细教程
  • 前端项目部署 打包上线
  • 人脸美颜磨皮祛痘1:数据集说明(含下载链接)
  • LangGraph:人工干预与自动化结合
  • 使用workvisual对库卡机器人进行程序备份
  • 86. Java 数字和字符串 - 数字
  • Doris ClickHouse Greenplum 对比
  • 6.3.2图的深度优先遍历
  • 跨模态行人检索方法综述(上)
  • 使用YouDDNS-Docker为飞牛NAS配置YouDDNS动态域名解析
  • 如何选用正确的html元素
  • 2025年渗透测试面试题总结-匿名[社招]安全工程师(中级红队)(题目+回答)
  • 《Python语言程序设计》第4章第8题3个个位数之间比大小。‘a小于b而b大于c’这是最有漏洞的一个对比,请问我如何判断a和c