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

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 = "********"  # 强烈建议使用 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.lryc.cn/news/2391981.html

相关文章:

  • 用豆包写单元测试
  • 传输层协议TCP(上)
  • Windows下安装并使用kubectl查看K8S日志
  • Hive 分区详解:从基础概念到实战应用
  • Android studio进阶开发(六)--如何用真机通过okhttp连接服务器
  • 如何解决网站服务器的异常问题?
  • WeakAuras Lua Script [ICC BOSS 11 - Sindragosa]
  • 用户界面禁忌——基础原则
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • vite配置一个css插件
  • React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示
  • Spring框架学习day4--Spring集成Mybatis(IOC)
  • 太阳系运行模拟程序-html动画
  • 【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂
  • SOC-ESP32S3部分:18-串口
  • CSS 样式表的四种应用方式及css注释的应用小结
  • 五、web安全--XSS漏洞(2)--XSS相关payload
  • AI架构师的新工具箱:ChatGPT、Copilot、AutoML、模型服务平台
  • 关于智能体接入后端,在Apifox能够传参数给智能体的测试
  • 有铜半孔工艺的制造难点与工艺优化
  • python分步合并处理excel数据
  • MC0309魔法项链
  • 为 Ubuntu 安装的软件创建桌面图标
  • uni-app 中开发问题汇总
  • https下git拉取gitlab仓库源码
  • 距离计算范围查找距离排序
  • PS linux 基础篇1-AXI_DMA
  • AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔
  • 11高可用与容错
  • 百度之星2024 初赛第一场 补给