使用 Python 构建网站连通性检查器

2025年3月17日 | 阅读18分钟

网站连接检查器是一种帮助您监控互联网连接状态的工具。它检查您尝试访问的网站是否可用和可访问。如果网站已关闭,检查器将提供一条消息,指示该网站当前不可用。另一方面,如果网站正常运行,检查器将返回一条消息,指示该网站可访问。

如今,互联网已成为我们日常生活中不可或缺的一部分。从通信到商业运营,我们都依赖互联网来执行大量任务。因此,拥有可靠稳定的互联网连接变得至关重要。有时,互联网连接问题会导致沮丧和生产力损失。为了克服这个问题,使用Python构建一个网站连接检查器会很有用。

在本文中,我们将讨论如何使用Python构建网站连接检查器。Requests库是一个流行的Python HTTP请求库,易于使用。我们将使用Python中的Requests库向网站发出HTTP请求并检查其状态。

安装Requests库后,我们可以开始将其导入到Python脚本中。然后,我们可以编写一个简单的函数来向网站发出HTTP请求并检查其状态。该函数将使用GET方法请求并返回一个状态码,指示网站的状态。

然后,我们可以编写一个循环,它将持续向网站发出HTTP请求并检查其状态。如果状态码为200,我们可以显示一条消息,指示该网站可访问。如果状态码为404,我们可以显示一条消息,指示该网站当前不可用。

网站连接检查器可以通过多种方式进行扩展,使其功能更强大、更用户友好。一些想法是:-

  • GUI界面: 为了使网站连接检查器更易于访问,可以向脚本添加GUI界面。GUI界面可以以视觉上吸引人的方式显示网站状态,并允许用户更轻松地与检查器交互。
  • 日志记录: 网站连接检查器可以更新以包含日志记录功能,以跟踪网站的状态。日志可以记录网站何时被检查以及状态是什么。这对于排查连接问题和跟踪网站的可靠性非常有用。
  • 电子邮件通知: 为了随时了解任何连接问题,网站连接检查器可以更新以发送电子邮件通知。检查器可以编程为在网站不可用时发送电子邮件,提醒用户可能存在互联网连接问题。
  • 可自定义设置: 为了使网站连接检查器更灵活,可以添加可自定义设置。例如,用户可以选择检查频率、要检查的网站以及要发送通知的电子邮件地址。
  • 连接图形表示: 网站连接检查器还可以更新以提供网站连接的图形表示。该图可以显示网站随时间的状态,从而更容易识别其可靠性中的模式和趋势。

所需先决条件

要使用Python构建网站连接检查器,您应该对以下概念有基本的了解:-

  • Python编程: 构建网站连接检查器需要对Python编程语言有基本的了解。您应该了解语法、变量、函数和循环。
  • HTTP请求: 网站连接检查器将向网站发出HTTP请求,因此了解HTTP请求和响应至关重要。
  • Python Requests库: 您应该了解Python中的Requests库以及如何使用它来发出HTTP请求。
  • 错误处理: 在构建网站连接检查器时,错误处理至关重要,因为您必须捕获请求期间可能发生的任何异常或错误。
  • 套接字基础知识: Python中使用套接字在客户端和服务器之间创建连接。对套接字的基本了解可以帮助您更好地理解网站连接检查器的工作原理。
  • GUI编程: 如果您想为网站连接检查器构建图形用户界面,您应该了解Python中的GUI编程。
Building a Site Connectivity checker in Python

设置网站连接检查器

要设置网站连接检查器,第一步是为网站连接创建一个虚拟环境。

通过在Python中为您的网站连接检查器项目创建虚拟环境,您可以隔离您的项目依赖项,并避免与系统上的其他项目发生冲突。这有助于您为项目维护一个干净整洁的环境,并使其更容易与他人共享。

虚拟环境的另一个优点是可以在不同的虚拟环境中安装相同包的不同版本。例如,您可以有一个安装了Requests库2.0版本的虚拟环境,而另一个安装了相同库3.0版本的虚拟环境。这有助于您使用所需包的不同版本测试您的项目,并确保与不同系统的兼容性。

创建虚拟环境会为您的项目创建一个单独的目录,您安装的所有包都将存储在该目录中。这意味着当您停用虚拟环境时,这些包将不可在您的系统中使用,您也不会意外地在另一个项目中使用它们。

为Python中的网站连接检查器项目创建虚拟环境的步骤

  • 安装virtualenv: 要在Python中创建虚拟环境,您首先需要安装virtualenv包。您可以使用终端中的pip命令安装它
  • 创建虚拟环境: 您需要为您的网站连接检查器项目创建一个虚拟环境。要创建虚拟环境,请在终端中使用以下命令

将 <environment_name> 替换为您要给虚拟环境的名称。例如,如果您想将虚拟环境命名为 site_checker,您将使用以下命令

  • 激活虚拟环境: 创建虚拟环境后,您需要在使用它之前激活它。要激活虚拟环境,请在终端中使用以下命令

将 <environment_name> 替换为您给虚拟环境的名称。

  • 安装所需包: 激活虚拟环境后,您可以为您的网站连接检查器项目安装所需的包。要安装Requests库,请在终端中使用以下命令
  • 停用虚拟环境: 完成项目工作后,您可以使用终端中的以下命令停用虚拟环境

组织网站连接检查器

组织代码对于将来更容易维护和更新至关重要。一个组织良好的项目使其他人更容易理解和贡献项目,并减少错误和错误的风险。以下是组织Python网站连接检查器项目的一些其他提示

  • 使用描述性变量名:确保您的变量名具有描述性并解释它们存储的内容。例如,不要使用“-x”作为变量名,而使用“-site_url”来描述它存储的内容。
  • 使用模块和包:如果您的项目增长,请考虑将其分解为模块或包。这使得管理和维护代码变得更容易,也使得在项目之间重用代码变得更容易。
  • 文档化您的代码:确保通过向函数和类添加文档字符串来文档化您的代码。这有助于其他人了解如何使用您的代码,也有助于您将来记住您的代码是如何工作的。
  • 使用一致的编码风格:确保在整个项目中使用一致的编码风格。这使得其他人更容易阅读和理解您的代码,并帮助您保持代码的干净和有组织。
  • 使用日志:使用日志来跟踪您的代码正在做什么。这使得调试代码和跟踪错误变得更容易。
  • 测试您的代码:彻底测试您的代码,以确保它按预期工作。这有助于降低代码中错误和错误的风险。

检查网站连接

要检查网站的连接性,您可以使用Python中的requests库。requests库提供了一种在Python中进行HTTP请求的简单方法,可用于检查网站的连接性。

通过检查网站的连接性,您可以确定网站是否在线并可供用户访问。这很重要,因为它可以帮助您确保您的网站始终可供用户访问,它还可以帮助您监控网站的性能。

有几种方法可以检查网站的连接性,包括使用Python中的requests库,如上所述。requests库提供了一个简单易用的接口来发出HTTP请求,并且只需几行代码即可用于检查网站的连接性。

除了检查网站的连接性,您还可以使用requests库检索有关网站的信息,例如响应状态码、标头和内容。例如,您可以使用response.status_code属性检索服务器返回的状态码,您可以使用response.text属性检索网站的内容。

为了使网站连接检查器功能更强大,您还可以一次检查多个网站的连接性。如果您需要监控多个网站的连接性,或者您需要在循环中检查多个网站的连接性,这会很有用。

Building a Site Connectivity checker in Python

实现连接检查器函数。

使用Python和requests库实现连接检查器函数的示例

步骤1:导入必要的模块

步骤2:定义检查给定URL连接性的函数

此函数使用requests模块向URL发出GET请求,并检查响应的状态码。如果状态码为200(即OK),则函数会打印成功消息。如果在发出请求时出现异常,则函数会打印错误消息。

步骤3:测试函数

这将使用URL "https://www.google.com"调用check_connectivity()函数。如果函数正常工作,它应该打印成功消息。

您可以使用此函数通过将不同的URL作为参数来检查多个URL的连接性。

运行首次连接检查

一旦您实现了连接检查器函数,您就可以开始运行您的首次连接检查了。

您还可以在您的项目中使用连接检查器函数,以确保您的网站可访问且性能良好。

我们之前定义的check_connectivity()函数

步骤1: 在您喜欢的编辑器中打开一个新的Python文件。

步骤2: 复制并粘贴用于实现连接检查器以及导入和以下代码的代码到文件中:-

步骤3: 将文件保存为connectivity_checker.py之类的名称。

步骤4: 打开终端或命令提示符,并导航到您保存文件的目录。

步骤5: 运行以下命令执行文件

这将使用URL "https://www.google.com"调用check_connectivity()函数,如果连接成功,则打印成功消息。

您可以修改传递给check_connectivity()的URL来测试不同网站的连接性。您还可以修改函数以添加更高级的功能,例如检查网站上的特定内容或将结果记录到文件中。

创建网站连接检查器CLI

为您的网站连接检查器创建命令行界面 (CLI) 可以提供一种更用户友好和高效的方式来运行连接检查。CLI 允许您从终端运行连接检查器,而无需用户界面。

CLI 允许用户直接从命令行与您的工具交互,而无需编写代码或使用图形用户界面。这对于需要快速检查多个网站连接性的开发人员,或需要自动化监控网站性能的系统管理员来说尤其有用。

要为您的网站连接检查器创建 CLI,您可以使用 Python 中的 argparse 等库。Argparse 是一个标准库,它提供了一种编写用户友好的命令行界面的便捷方法。

此代码使用 Python 中的 argparse 库为网站连接检查器创建命令行界面 (CLI)。

导入库

在本节中,我们导入 argparse 库来创建 CLI,并导入 sys 库以使用状态码退出程序。

定义check_connectivity函数

在本节中,我们定义了check_connectivity函数,该函数将网站URL作为参数并返回连接检查的结果。此示例中省略了连接检查器函数的实现。

在命令行解析网站URL

代码正在命令行解析网站URL。这是通过使用argparse模块完成的,argparse模块是Python中的一个标准库。argparse模块提供了一种解析命令行参数和选项的简单方法。

步骤1:导入必要的模块

步骤2:定义检查给定URL连接性的函数

步骤3:使用argparse从命令行解析URL

此代码创建一个 ArgumentParser 对象并向其添加一个位置参数 url。然后它使用 parse_args() 解析命令行参数。url 参数存储在 args 对象中,然后传递给 check_connectivity() 函数。

步骤4:测试代码

将以上代码保存到一个名为connectivity_checker.py的文件中,然后在终端中运行以下命令

这将使用URL "https://www.google.com"调用check_connectivity()函数。如果函数正常工作,它应该打印成功消息。

website = args.website 从 args 对象中检索“website”参数的值并将其存储在 website 变量中。这是要检查的网站的URL。

result = check_connectivity(website) 调用 check_connectivity 函数并将网站 URL 作为参数传递。该函数返回一个布尔值,指示网站是否可访问,该值存储在 result 变量中。

最后,我们使用if-else语句打印连接检查结果,并在失败时以状态码1退出。sys.exit(1)语句表示错误退出状态,这在脚本或其他自动化进程中运行CLI时非常有用。

运行主函数

markdown

在本节中,我们将在脚本直接执行时运行主函数。这允许我们通过简单地执行脚本来运行CLI,而无需显式调用主函数。

从文件加载网站URL

要从文件中加载网站URL,我们可以修改代码以读取文件的内容并将URL存储在列表中。然后,我们可以遍历列表并对每个网站执行连接检查。

以下是如何修改代码以从文件中加载网站URL:

这些行与在网站URL命令行的解析过程中提到的方式相同。

此代码将参数 "file" 添加到 argparse.ArgumentParser 对象,以指定包含要检查的网站 URL 的文件。open 函数用于打开文件,而 readlines 方法读取文件内容并将其存储在列表中。

接下来,代码遍历网站列表,并使用 check_connectivity 函数对每个网站执行连接检查。如果网站可访问,则向控制台打印一条消息,指示该网站可访问。

如果网站不可访问,则向控制台打印一条消息,指示网站不可访问,并且程序以非零状态码退出。strip 方法从网站 URL 中删除任何前导或尾随空格。

将所有内容整合到应用程序的主脚本中

主脚本是构建Python网站连接检查器的最后一块拼图。通过组合前面步骤中的所有代码片段,我们可以创建一个完整且功能齐全的应用程序。

该脚本还将利用 argparse 库为用户创建命令行界面。这允许用户将网站 URL 或包含网站 URL 的文件指定为命令行参数。

该脚本将处理用户输入,对单个 URL 执行连接检查,或循环遍历文件中的 URL 列表并打印可访问的结果。程序将以非零状态码退出,表示错误。

创建应用程序入口点脚本。

要创建应用程序的入口点脚本,我们首先将导入所有必要的模块,例如 argparse 和 requests。然后,我们将定义一个主函数作为应用程序的起点。在此函数中,我们将使用 argparse 模块定义和解析传递给脚本的参数,包括要检查的网站 URL。

代码的第一部分创建一个解析器对象,并添加一个参数 --urls,它是包含要检查的网站列表的文件路径。required 属性设置为 True,因此脚本只会在提供 --urls 参数时运行。

代码的第二部分打开由 --urls 参数指定的文件,并将其内容读入一个 urls 列表。

代码的第三部分遍历网站列表,使用 check_connectivity 函数检查每个网站的连接性,并将结果附加到 results 列表中。如果网站可访问,则将消息 {website} is accessible 打印到控制台。否则,将打印 {website} is not accessible,并且脚本以非零状态码 1 退出。

检查多个网站的连接性

try 块中的代码使用 requests.get 方法向网站发出 GET 请求,并将响应存储在 response 变量中。

此处捕获 requests.exceptions.RequestException 异常,该异常涵盖了在使用 requests 库发出请求时可能发生的任何异常。

check_website_status 函数可以通过将其 URL 作为参数传递来检查任何网站的连接性。= requests.get(url)

从命令行运行连接检查

从命令行运行 Python 脚本是一种无需在 IDE 或文本编辑器中运行即可执行脚本并查看其输出的方法。这允许您自动化连接检查并安排它定期运行,无需任何手动干预。

以下是从命令行运行脚本的快速步骤

  • 打开终端或命令行: 在 Windows 上,您可以通过单击“开始”按钮,在搜索框中键入“cmd”,然后单击“命令提示符”应用程序来打开命令行。在 macOS 或 Linux 上,您可以通过在 Spotlight (macOS) 中搜索或使用快捷键 Ctrl + Alt + T (Linux) 来打开终端。
  • 导航到脚本所在的目录: 您可以使用 cd 命令将当前工作目录更改为脚本所在的目录。例如,如果脚本位于桌面上的“scripts”目录中,您将键入 cd ~/Desktop/scripts 并按 Enter。
  • 执行脚本: 键入 python filename.py(将 filename.py 替换为脚本的实际名称)并按 Enter。这将运行脚本并在终端中显示输出。
  • 通过从命令行运行脚本,您可以轻松自动化连接检查并使用 cron(在 Linux 上)或任务计划程序(在 Windows 上)等工具安排它们定期运行。这使您可以持续监控多个网站的连接性,并主动解决可能出现的任何连接问题。

异步检查网站连接

如果网站数量众多或某些网站响应较慢,同步检查多个网站的连接性(一个接一个)可能会花费很长时间。为了克服这个问题,您可以异步检查网站的连接性。

在 Python 中,您可以使用 asyncio 库来执行异步任务,包括检查网站的连接性。asyncio 库提供了一种并发运行多个协程(小型、单一用途的函数)并管理它们之间执行流的方法。

这使得并行检查多个网站的连接性并提高脚本性能成为可能。

实现异步检查器函数

1. 导入 asyncio 和 aiohttp 库

此步骤导入 asyncio 和 aiohttp 库,它们用于执行异步任务和发出 HTTP 请求。

2. 编写一个协程来检查单个网站的连接性

协程使用 async with 语句为 ClientSession 对象创建异步上下文,该对象用于发出 HTTP 请求。ClientSession 对象被创建为异步上下文管理器,当 async with 块退出时会自动关闭。

session.get 方法用于发出 HTTP GET 请求并返回 ClientResponse 对象。然后使用 ClientResponse 对象通过 resp.status 属性获取响应的状态码。

3. 编写一个主协程,为每个网站创建任务并并发运行它们

它定义了一个要检查的网站列表,使用 check_website_connectivity 协程为每个网站创建一个任务,并使用 asyncio.gather 函数并发运行这些任务。

asyncio.gather 函数收集所有任务的结果并将它们作为列表返回。

4. 运行主协程

此代码调用 asyncio.run 函数来运行主协程并检查所有网站的连接性。if __name__ == "__main__": 块确保代码仅在脚本直接运行而不是作为模块导入时执行。

要向网站连接检查器应用程序的 CLI 添加异步选项,您可以使用 click 等库来定义 CLI 接口和选项:-

安装 click 库

在您的 Python 脚本中导入 click 库

使用 click.option 装饰器向 CLI 接口添加新选项

此选项名为 --async,允许用户指定连接检查应异步还是同步执行。默认值为 False,因此除非指定 --async 选项,否则连接检查将同步执行。

修改主代码以根据 async 选项异步或同步运行连接检查

此代码检查 async 选项的值,并调用 asyncio.run 函数以运行 check_websites_async 协程,或调用 check_websites_sync 函数以运行同步版本的连接检查。

异步检查多个网站的连接性

要异步检查多个网站的连接性,您可以使用 Python 中的 asyncio 库。

此协程使用列表推导为每个需要检查的 URL 创建一个任务列表。然后,它使用 asyncio.gather 函数并发运行所有任务。await 关键字用于等待所有任务完成,然后才能进入下一步。

使用 asyncio.run 调用 check_websites_async 协程

此行代码启动异步事件循环并运行 check_websites_async 协程,直到它完成。

输出

$ python connectivity_checker.py https://www.google.com https://#
https://www.google.com is up and running
https://# is up and running

$ python connectivity_checker.py https://www.google.com https://# --async
https://www.google.com is up and running
https://# is up and running

结论

我们用 Python 构建了一个功能齐全的网站连接检查器应用程序。现在我们了解了处理给定网站的 HTTP 请求的基础知识。我们还学习了如何为您的应用程序创建最小而功能齐全的命令行界面 (CLI),以及如何组织一个真实的 Python 项目。此外,您还尝试了 Python 的异步功能。

在本教程中,您学习了如何:-

  • 使用 argparse 在 Python 中创建命令行界面 (CLI)。
  • 使用 Python 的 http.client 检查网站是否在线。
  • 对多个网站运行同步检查。
  • 使用 aiohttp 检查网站是否在线。
  • 异步检查多个网站的连接性。