如何抓取 GitHub:实用教程 2024

GitHub 是互联网上最重要的技术知识来源之一,对于构建复杂应用程序的开发人员来说尤其如此。跟随本指南学习如何提取这些宝贵的数据,毫不费力地紧跟最新技术趋势。

了解 GitHub 数据

开源项目文化为开发人员提供了许多分享、贡献和合作的机会,这些项目塑造了技术的未来。GitHub 就是这样一个知识共享中心。

这个想法基于 Git 系统,它提供了一种简单的方法来维护和版本控制你的代码,并与其他开发人员在共享项目上进行协作。在更大的范围内,几乎任何人都可以为大型项目做出贡献、提出问题或重复使用代码作为自己想法的起点(也称为分叉)。

每个项目都位于其专用的资源库中。这是一个保存了项目所有信息的页面,包括项目描述、代码文件、版本、更新日志、许可证、贡献者、使用的编程语言等等。这些项目就是我们在 GitHub 上搜索信息时要找的内容。让我们来看看其中最有价值的几项:

  • 代码文件。代码文件是每个版本库的基础和黄油,包含整个项目的文件夹和文件。任何人都可以通过它了解应用程序在幕后是如何工作的,查看脚本文件,以及它们是按照怎样的逻辑运行的。
  • README。默认情况下,所有软件源都需要有一个 README 文件。顾名思义,该文件希望你在继续前行前阅读它,因为它包含了项目的所有必要信息。该文件包括说明、设置和启动项目的分步指南,以及其他有用的信息和提示。
  • 叉和星。GitHub 并不完全是一个社交媒体平台,但如果它有 "赞 "和 "分享 "的话,这些就相当于。星星只是人们收藏或支持项目的一种方式--星星越多,项目越受欢迎,证明代码对许多人有用且有价值。分叉代表该版本库被分叉的次数。换句话说,它显示了有多少克隆库将其作为启动项目或构建、更新或修复原始代码的基础。
  • 问题和拉取请求。如果你曾在一个团队中参与过软件项目,你就会知道大多数交流都是抱怨、争论和修复代码。这正是 GitHub 所提供的,因此开发人员可以在这里找到家的感觉。问题板块允许人们提交问题单,供贡献者修复。更多乐于助人的人则会亲自动手,提交拉取请求。这些请求是接受他们对代码某部分的修改,以修复或改进代码。

总而言之,GitHub

提供了大量宝贵的技术数据。从大公司到个人项目,每个版本库中都有有用的信息。让我们来学习如何有效地收集和分析这些数据,以满足您的业务或个人需求。

选择正确的工具

有许多工具可用于 GitHub 搜索。你可以选择标准的 Requests + Beautiful Soup 组合,也可以选择 Scrapy 这样的一体化解决方案。还有一些开源项目(如 github3.py)提供了与 GitHub API 交互的增强方法。本指南将只详细介绍其中的几种方法,但请记住,你所选择的工具完全取决于你的个人选择、需求和可用功能。

cpp 复制代码
首次自助交易请使用代码 "CSDN50"!https://bit.ly/4d5HeRK

请求提供美汤

如果你尝试过网络搜刮,那么 Requests 和 Beautiful Soup 这两个名字可能不会陌生。它们是目前最流行的 Python 库之一,提供简单的语法和强大的功能,可以向网站发出请求,并有效地从中抓取和解析信息。下面是一个代码示例,说明如何解析任意资源库的 HTML:

代码

脚本会将整个页面的 HTML 代码打印到控制台中。更准确地说,您可以利用 Beautiful Soup 的各种方法,如 find()。下面是一个仅提取 "关于 "部分的示例:

代码

这种方法可以顺利地从 GitHub 仓库中提取任何内容。不过,如果试图获取其中一条提交信息,就会遇到脚本返回 None 的问题。要找出原因,我们可以禁用 JavaScript 查看网站。看起来就是这样:

图像?

问题在于 GitHub 使用动态呈现内容,这意味着并非所有信息都会在首次请求网站后出现。在通常情况下,使用网页浏览器时,网站的基本内容会首先加载,然后在 JavaScript 的帮助下渲染其余信息。遗憾的是,我们没有办法告诉脚本只用 Requests 和 Beautiful Soup 来等待所有内容加载完毕。

这种方法最容易实现,可以完成大多数刮擦任务。不过,这种方法也有其局限性,可能不适合动态网络不断变化的环境。

Selenium

要抓取动态内容,您需要一个工具,在执行任何抓取任务前渲染整个页面。Selenium 是一款基于 Python 的自动化工具,通常用于网络浏览器测试,但也可用于动态网络内容的搜刮。它的用户友好界面使其易于使用和上手。

在下面的章节中,我们将探讨如何使用 Python 设置 Selenium,以便从 GitHub 存储库中抓取数据。如果你正在寻找基于 JavaScript 的解决方案,你可能还想看看 PuppeteerPlaywright 库,作为替代选择。

如何抓取 GitHub 仓库?

要抓取任何 GitHub 仓库,你必须掌握检查网页、查看 HTML 以及选择包含所需数据的元素的基本方法。然后,您需要设置并安装 Selenium 等工具,用它来编写脚本,加载网站,提取所需数据,并以易于阅读的方式存储。

听起来很难理解?不用担心,我们将逐步讲解每一个要点。在本指南结束时,你将能够编写和修改自己的 Selenium 脚本,以刮取任何你想要的 GitHub 数据。

设置环境

让我们从安装 Selenium 开始,将其用于我们的项目。确保电脑上已安装 Python 和 pip packet 管理器。然后,在终端工具中输入以下命令:

代码

第一条命令将下载并安装最新版本的 Selenium 及其依赖项。第二个命令将安装我们已经熟悉的 Beautiful Soup 库--它在刮擦网络时的价值不言而喻。Selenium 还需要一个 WebDriver 才能与网络浏览器交互。你需要为你要使用的浏览器下载相应的 WebDriver。Selenium 支持各种网络浏览器,如 Chrome、Firefox、Safari 等。你可以在以下链接中找到 WebDriver:

最后,让我们运行一个简单的脚本来检查 Selenium 和 WebDrivers 是否都已正确安装。新建一个包含以下代码的 Python example_file.py:

cpp 复制代码
首次自助交易请使用代码 "CSDN50"!https://bit.ly/4d5HeRK

代码

要执行脚本,请打开终端工具,导航到文件所在的目录(使用 cd 命令),然后键入

代码

你会看到一个浏览器窗口出现并短暂加载页面。然后,浏览器会在终端窗口中打印网页标题。在本例中,你应该看到 Example Domain。你可以用不同的网页进行测试,看看它是否能正确返回标题。如果是,则说明 Selenium 设置正确!

如何构建 GitHub 搜索引擎?

让我们用 Requests 和 Beautiful Soup 重复前面的示例,并从 Smartdaili 的主资源库中抓取 "关于 "部分。您还需要导入一些 Webdriver 库和 Beautiful Soup。代码如下:

代码

脚本打开网页,获取 HTML 内容,对其进行解析,然后使用 Beautiful Soup 的 find() 方法提取符合所提供类的元素。你可以进一步修改代码,根据类、父元素或页面上的位置提取不同的元素。有了正确的提示,你几乎可以从 GitHub 仓库中提取任何数据!

您可能会问,这与通常的请求和美丽汤脚本有何不同。在某种程度上,它执行相同的过程,返回相同的结果。不过,Selenium 有一个我们尚未触及的优势--渲染动态内容的能力。由于 "关于 "部分不是动态加载的,因此使用这两种方法没有区别。渲染内容(如提交信息)需要 Selenium 的能力,即等到加载完成后才从页面获取内容。

cpp 复制代码
首次自助交易请使用代码 "CSDN50"!https://bit.ly/4d5HeRK

高级技术

您需要在脚本中添加一个延迟来抓取动态内容。让我们尝试通过添加 implicitly_wait() 方法来抓取提交消息,该方法将等待 10 秒钟让 JavaScript 呈现。我们还使用了 selenium-wire 工具,它扩展了常规 Selenium WebDriver 的功能。然后,它会循环查看提交信息,并将它们全部打印在终端中:

代码

就像变魔术一样,Selenium 会加载网页,等待网页完全加载完毕,然后获取所需的信息。

还有一点要记住:来自同一 IP 地址的重复请求可能会被 GitHub 屏蔽或限制速率。这一点在同时抓取多个版本库时尤为重要。幸好,Smartdaili 提供的代理服务器可以帮您轻松解决这些问题。

代理是您与目标之间的中间人。它接收你的请求,将其重新路由到一个不同的 IP 地址,并代表你发出请求。这样,你的活动就完全匿名了,因为你的每一个请求都来自不同的 IP 地址。这样,您就可以尽可能多地发出请求,而不必担心受到限制!

要在脚本中加入 Smartdaili 代理,请从仪表板获取身份验证和端点信息。然后,像这样在脚本中输入认证和端点:端口信息:

代码

用你的凭据和信息替换用户、通行证、端点和端口。就这样,你通过代理服务器向 GitHub 仓库发出了请求。

最后的话

在本文中,你已经学会了如何构建自己的 GitHub 仓库刮刀。无论你是使用 Requests 和 Beautiful Soup,还是使用 Selenium 构建一个更复杂的工具,你都能通过使用示例代码并根据自己的需求进行修改,提取任何你想要的数据。由于 GitHub 是一个知识共享社区,我们非常鼓励你不仅从中收集数据,还为许多项目做出贡献。您甚至可以分享自己使用本指南创建的项目,帮助全世界的开发者。

如果你对编码不是很熟悉,正在寻找一种更直接的工具,不妨试试 Smartdaili Web Scraping API。它易于使用,设置只需几秒钟,可以向任何 GitHub 仓库或网站发出请求,并返回你想要的内容。

cpp 复制代码
首次自助交易请使用代码 "CSDN50"!https://bit.ly/4d5HeRK
相关推荐
阡之尘埃1 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
丕羽4 小时前
【Pytorch】基本语法
人工智能·pytorch·python
bryant_meng5 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
鱼满满记5 小时前
1.6K+ Star!GenAIScript:一个可自动化的GenAI脚本环境
人工智能·ai·github
m0_594526306 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业6 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端6 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬6 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn
Json____6 小时前
python的安装环境Miniconda(Conda 命令管理依赖配置)
开发语言·python·conda·miniconda
小袁在上班7 小时前
Python 单元测试中的 Mocking 与 Stubbing:提高测试效率的关键技术
python·单元测试·log4j