使用 Python 和 wget 轻松下载网页和文件
Suciu Dan,2023 年 4 月 21 日

您是否厌倦了手动下载网页和文件?您是否希望有一种更简单的方法来获取所需的数据?不用再找了!在本文中,我将向你展示如何使用 Python 和命令行工具 wget 自动完成下载过程。
在本文中,你将了解如何使用 Python 和 wget 自动完成从网上下载的过程,同时了解 wget 的功能和局限性,以及用于网络搜刮的其他工具。
为什么是 Python?
Python 是一种强大而流行的编程语言,可用于自动化、数据科学和应用程序开发等多个领域。Python 简单易学,拥有大量模块和框架库,可增强其功能。
为什么选择 wget?
Wget 是一种命令行工具,允许你从互联网上下载文件。它广泛适用于大多数类 Unix 系统,包括 Linux 和 macOS。Wget 是一款多功能工具,可用于下载单个文件、多个文件甚至整个目录。
以下是 wget 的一些主要功能:
- 从互联网下载文件Wget 可用于从互联网下载文件,包括网页、图像和其他类型的文件。
- 自定义下载选项:Wget 允许您指定各种选项来定制下载,例如保存文件的目录、文件名以及是否覆盖现有文件。
- 恢复中断的下载如果下载中断,wget 可以从中断处继续下载,从而节省时间和带宽。
- 递归下载:wget 可用于通过递归链接下载整个网站或目录。
- 支持 HTTP、HTTPS 和 FTP:Wget 可处理各种类型的互联网协议,包括 HTTP、HTTPS 和 FTP,使其成为从不同类型服务器下载的多功能工具。
- 适用于大多数类 Unix 系统Wget 广泛适用于大多数类 Unix 系统,包括 Linux 和 macOS,因此可在各种平台上轻松使用。
为什么在 Python 中使用 wget?
Python 和 wget 可以结合使用,实现网页和文件下载过程的自动化,从而节省时间和精力。Wget 可通过 Python 进行定制,网页抓取或文件下载任务可集成到现有的 Python 脚本中。
在 Python 中使用 wget 有几个原因:
- 自动化:通过将 wget 与 Python 结合使用,您可以将从互联网下载文件的过程自动化。这可以节省时间和精力,尤其是当你需要下载大量文件或网站时。
- 自定义Wget 允许您指定各种选项来定制下载,例如保存文件的目录、文件名以及是否覆盖现有文件。通过将 wget 与 Python 结合使用,您可以以编程方式设置这些选项,并根据自己的需要定制下载。
- 易于使用:Python 以其简单和可读性著称,是一种易于学习和使用的语言。通过将 wget 与 Python 结合使用,您可以充分利用 Python 的强大功能,让网络搜索和文件下载任务变得更轻松。
- 可扩展性:Python 是一种可扩展的语言,能够处理大量数据。通过将 wget 与 Python 结合使用,您可以扩展网络搜索或文件下载任务,以处理更大的数据集。
开始
现在,我们已经讨论了 Python 和 wget 的各自优势和组合优势,下面我们来讨论代码编写部分。
安装 wget
确保计算机上安装了 wget。如果你选择的操作系统是 Linux,那么你已经安装了它。
- 如果您是 Windows 用户,可以从本页面下载二进制文件。确保将二进制文件路径添加到PATH 环境变量中。另一种方法是使用 WSL(Windows Subsystem for Linux)。点击此处了解更多信息。
- 如果您是 Mac 用户,请使用brew安装 wget
别忘了查看 wget 的详细文档。
安装 Python
从官方网站获取最新版本的 Python,并按照适用于您平台的安装说明进行安装。安装完成后,您可以使用此命令检查版本:
python3 --version
用 Python 运行系统命令
Python 中的 `subprocess` 模块允许您运行系统命令并捕获其输出。这是一种在 Python 脚本中与操作系统交互的强大而灵活的方式。
要使用 `subprocess` 模块,首先需要将其导入 Python 脚本。然后,可以使用 `subprocess.run()` 函数运行系统命令并捕获其输出。
函数 `run()` 以字符串形式接收要运行的命令,并返回一个 `CompletedProcess` 对象,其中包含命令的退出代码、stdout 和 stderr。
下面是一个使用`subprocess.run()`函数运行 ls 命令的示例,该命令可列出目录中的文件:
import subprocess
result = subprocess.run(['ls', '-l'])
print(result.stdout)
使用 python3 main.py 命令运行这段代码。结果应该是这样的
total 4
-rw-r--r-- 1 dan dan 80 Jan 6 18:58 main.py
None
使用 wget 下载
下载文件
让我们从下载 WebScrapingAPI 徽标开始。用 `wget` 和徽标 URL 替换参数列表。命令将如下所示
result = subprocess.run(['wget', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
脚本将返回以下输出:
--2023-01-06 19:06:32-- https://www.webscrapingapi.com/images/logo/logo-white.svg
解析 www.webscrapingapi.com (www.webscrapingapi.com)...76.76.21.61, 76.76.21.98
连接到 www.webscrapingapi.com (www.webscrapingapi.com)|76.76.21.61|:443... 已连接。
HTTP 请求已发送,等待响应... 200 OK
Length: 5391 (5.3K) [image/svg+xml]
Saving to:'logo-white.svg'
logo-white.svg 100%[====================================================================================================================================================================>] 5.26K --.-KB/s in 0.06s
2023-01-06 19:06:33 (91.6 KB/s) - 'logo-white.svg' 已保存 [5391/5391]
无
从输出结果中,我们可以看到 `wget` 如何解析域名、连接到域名、接收`200 OK` 响应代码、找到文件长度(5.3k)并开始将文件保存到本地,文件名为 `logo-white.svg` 。
您可以检查项目文件夹中的 "logo-white.svg "文件。
在目录中下载
您可以使用 `-P` 标志将文件下载到自定义目录中。让我们更新脚本并运行它,看看结果如何:
result = subprocess.run(['wget', '-P', 'images', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
输出结果几乎相同,唯一不同的是文件存储在 `./images/` 目录中。
设置下载的文件名
使用 `-O` 标志,可以为下载的文件指定一个新名称。让我们试一试:
result = subprocess.run(['wget', '-O', 'named-logo.svg', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
检查项目文件夹中的 `named-logo.svg` 文件。
如果远程版本较新,则下载文件
只有当远程文件的版本比本地文件新时,才能使用 `-N` 标志下载远程文件。命令如下
result = subprocess.run(['wget', '-N', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
简历中断下载
如果下载中断,`wget` 可以从中断处继续下载,从而节省时间和带宽。要做到这一点,你需要使用 `-c` 标志,告诉 `wget` 继续中断的下载。
命令内容如下
result = subprocess.run(['wget', '-c', 'https://www.webscrapingapi.com/images/logo/logo-white.svg'])
如果文件下载已完成,您可以在输出中看到以下信息:
已发送 HTTP 请求,正在等待响应...416 请求范围无法满足
文件已全部检索完毕,无事可做。
递归下载
Wget 可以通过递归跟踪链接来下载整个网站或目录。为此,您需要使用`-r`和`-l`标记:`-r`标记告诉工具递归跟踪链接,`-l`标记指定递归的最大深度。
result = subprocess.run(['wget', '-r', '-l', '2', 'https://www.webscrapingapi.com'])
该命令将下载网址为"https://www.webscrapingapi.com "的网站,并跟踪同一网站上其他网页的链接,最大深度为 2。
当 wget 无法解决问题时?
在某些情况下,使用 curl、Beautiful Soup 或 Selenium 可能比使用 wget 更合适:
- 需要设置 HTTP 标头或 Cookie 时:Curl 允许您设置 HTTP 标头和 Cookie,这在与 API 交互或访问受保护网站时非常有用。而 `wget` 不具备这种功能。
- 当你需要从 HTML 中解析和提取数据时:wget 并不是为解析和提取网页数据而设计的。
- 当你需要以用户身份与网站交互时:Selenium 是一款能让你以用户身份与网站进行交互的自动化工具。它可以用来填写表格、点击按钮和执行其他 wget 无法实现的操作。
结论
Python 和 wget 是自动下载文件和网页的强大工具。通过将 wget 与 Python 结合使用,您可以自定义下载,将网页抓取或文件下载任务集成到现有的 Python 脚本中,从而节省时间和精力。
不过,重要的是要尊重下载网站的服务条款,避免服务器超载。
如果您正在寻找一种可替代 wget 的网络抓取工具,请考虑使用WebScrapingAPI。WebScrapingAPI 是一种专业的网络搜刮服务,它能让你轻松地从网站中提取数据,而无需构建和维护自己的网络搜刮器。
它是一种快速、可靠、经济高效的解决方案,适用于各种规模的企业。
新闻和更新
订阅我们的时事通讯,了解最新的网络搜索指南和新闻。
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

相关文章

学习如何使用 Scrapy 和 Splash 抓取 JavaScript 渲染的动态网站。从安装到编写 spider、处理分页和管理 Splash 响应,本综合指南为初学者和专家提供了循序渐进的指导。




