in

如何为 Wget 设置代理服务器?

如何为 Wget 设置代理服务器

可以使用wget以编程方式下载文件和页面。但是让我们把它带到下一个层次,使用wget和代理服务器来抓取网页而不会被阻止。

Wget 与 cURL 非常相似。它允许你使用终端发送命令并从 URL 下载文件。这意味着你可以将该命令安排为每天自动运行,从而不再担心。

但是,如果你想使其真正自动化,需要一个代理。当你抓取站点时,很容易被阻止。使用代理是防止这种情况的快速方法。因此,今天我们将探索如何使用 Wget、如何使用代理、如何安装它、如何处理最常见的问题等。

关键,这是一个交互式指南,因此你可以按照指南操作并使用我们链接的站点测试命令。那我们就开始吧!


Wget代理命令行

wget命令的语法很简单

wget [options] [url]

当谈到wget代理的使用时,你有两个主要的选择。可以将代理数据作为选项在命令中传递,也可以全局保存代理数据,这样就不需要每次都启动它。

但是在我们研究wget代理本身之前,让我们看看如何使用wget。运行命令:

wget -V

除非你安装了wget,否则你会看到一个错误。让我们先解决这个问题。


Wget 命令未找到

一些操作系统默认安装了 wget。特别是大多数 Linux 发行版。但是,如果你正在运行 macOS 或 Windows,当你第一次尝试运行 wget 时,可能会看到一个错误。这只是意味着你还没有安装它。不过,这很容易解决。

wget not found

Macbook 和 macOS 的 Wget

在Mac上安装wget最简单的方法是使用自制软件。你可以在你的终端上运行这个命令:

brew install wget

如果你没有自制软件,还有其他的选择。你可以简单地下载这个库(甚至使用cURL!)并安装它。

Windows 的 Wget

你可以直接从GNU项目下载wget的windows版本。然后你就可以打开安装程序并按照屏幕上的说明操作。现在可以使用wget了。但你应该这样做吗?为什么不使用cURL呢?让我们看看哪一个是最适合你的选择。


Wget vs. cURL

这个比较的简短版本是,wget 更易于使用(默认启用更多选项),而 cURL 更灵活,允许多种不同的协议和连接类型。

从实际功能上来说,cURL 可以使用 26 种不同的协议,而 wget 只使用基本的 HTTP、HTTPS 和 FTP 协议。你可以使用 wget 代理身份验证以及 cURL 代理身份验证。但是,wget 的连接类型更简单,你也受到其限制。

一般来说,wget可以很好地完成简单的抓取工作。你可以浏览网页,点击重定向,点击链接。另一方面,由于其灵活性,cURL可以完成所有这些任务和其他一些任务。

现在,让我们看看一些真实的 wget 命令示例,以及如何使用它们来获取页面。


通过代理使用 Wget – 不被阻止的网页抓取

当你使用 wget 时,即使是无害的调用,你也可能会被阻止。这是因为网站所有者不想与网页抓取者打交道,即使它们是完全合法的。

检测用户是否为 bot 的最简单方法是检查他们在网站上的浏览习惯。因此,你可以检查某个 IP 地址的访问页面,然后查看他们是否查看了太多页面、是否同时查看、或其他可能是 bot 的迹象。

但是,注意检测用户的关键点是查看来自同一个 IP 地址的连接。因此,你可以使用如 IPRoyalSOAX之类的住宅代理服务来隐藏你的 IP 地址。这样,网站所有者就无法追踪你访问了哪些页面,因为他们将看到每次访问的完全不同的 IP 地址。

现在你只将wget连接到代理并隐藏你的IP地址。你可以通过在wget命令之前使用http_proxy或https_proxy变量来实现,如下所示:

http_proxy=http://[username]:[password]@geo.iproyal.com:12321 wget -v http://ipv4.icanhazip.com/

还有其他类似的方法,例如使用-e,甚至是别名。例如,将整个代理调用保存为别名,然后在wget命令之前调用它。

一般来说,如果不希望wget代理影响整个操作系统,那么单行命令是使用wget代理的好方法。你只能在当前终端中获得代理连接,仅此而已。但是如果你想要存储这些信息,你可以这样做。


如何存储 Wget 的 http_proxy 变量

Wget 使用 http_proxy 和 https_proxy 变量,因此你可以永久编辑这些变量,并改变所有 Wget 命令的运行方式。请注意,这也会影响其他命令的运行方式,如 cURL。

系统会查看以下几个文件(按顺序):

  • ~/.wgetrc:用户启动文件。
  • /etc/wgetrc:全局启动文件。
  • ~/.bash_profile:用户特定环境。
  • /etc/profile:系统范围环境。

因此,系统会查看 ~/.wgetrc 文件。如果没有设置代理信息,那么它将查看 /etc/wgetrc 文件。然后,它将继续查看列表,直到找到这些信息。

你可以编辑任何这些文件,并取消注释/添加以下行:

use_proxy=yes
http_proxy=http://username:password@domain:port/
https_proxy=https://username:password@domain:port/
ftp_proxy=http://username:password@domain:port/

对于.bash_profile和/etc/profile文件,你需要使用shell命令来设置代理,如下所示:

export http_proxy=http://username:password@domain:port/
export https_proxy=https://username:password@domain:port/
export ftp_proxy=http://username:password@domain:port/

将用户名/密码/地址/端口替换为你自己的信息。就是这样!你可能需要重置你的终端浏览器,但是你的下一个连接正在使用你的wget代理信息。


Wget跟随重定向

这不是直接的wget代理问题,但它与你将面临的问题有关。使用wget最有用的方法之一是遵循重定向,从而允许它在重定向链的末端下载文件。

默认情况下,wget遵循重定向。例如:

wget -v http://google.com

你会在输出中看到这样的内容:

And you’ll see something like this in the output:
Resolving google.com (google.com)...
Connecting to google.com (google.com)... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://www.google.com/ [following]
Resolving www.google.com (www.google.com)...
Connecting to www.google.com (www.google.com)... connected.
HTTP request sent, awaiting response... 200 OK
Saving to: ‘index.html’

注意,wget首先尝试加载google.com,然后它被重定向到www.google.com。没问题,wget会立即按照新的路径下载index.html。如果由于某种原因wget重定向不能为你工作,请检查max_redirects属性,有时它被设置为1,删除任何进一步的重定向。


Wget忽略证书

有时候,我们需要在http和https之间切换,或者需要爬取具有过期证书的页面。如果你尝试在浏览器中加载这些页面,会遇到安全错误,这是有充分理由的。你正在混合明文内容和加密内容,或者可能正在访问具有过期SSL证书的页面。

但是,当涉及到网页爬取时,有时候你只是想让它工作。你可以将wget代理命令与这个命令结合使用,以忽略wget中的证书错误:

wget --no-check-certificate https://google.com

这允许你忽略证书错误,并且仍然可以看到页面的内容。


Wget –no-proxy

也许你已经保存了代理信息,但你只想在某个特定命令中禁用它。不用担心,–no-proxy设置可以帮你解决这个问题。你可以使用这个命令来覆盖任何代理数据,例如:

wget --no-proxy https://google.com

当然,如果你想使此更改永久保存,可以随时编辑设置文件。但这应该是一个快速解决方案。


Wget 基础命令

这里有一份简单的 wget 命令列表,供你使用 wget 代理爬虫。

  • 设置输出文件名: wget -o [filename] [url]

-o命令是-output-file =name的别名。

因此,你可以使用这个命令以自定义名称保存文件:

wget -v -o test.html https://google.com
  • 保存到指定路径: wget -P [path] [url]

你可以使用 -P 选项将文件保存到自定义路径。这样,你可以运行 wget 代理,并将网站的所有文件保存到一个特定文件夹中,例如:

wget -v -P path https://google.com
  • 设置用户代理: wget -user-agent =[name] [url]

用户代理是机器人活动的另一个明显标志。有些机器人甚至不发送有效的用户代理。这种行为非常可疑,因为大多数浏览器都会发送这些信息。

wget --user-agent=Safari https://google.com
  • 转换链接: wget -convert-links [url]

你可以下载文件,并将所有链接从固定链接转换为本地路径的本地链接。如果你想使用浏览器测试下载的文件,这特别有用。

wget --convert-links https://google.com

你会在转换链接作业的末尾看到此消息:

Converting links in index.html... 0-9
Converted links in 1 file in 0 seconds.

这意味着一旦你访问 index.html,所有过去的链接将引用你服务器中的相应页面。

  • 下载页面列表: wget -i links.txt

另一个适合使用 wget 进行网页爬取的功能是从列表中加载页面。你可以创建一个简单的 txt 文件,每行添加一个链接,然后使用这个命令:

wget -i links.txt

使用它,wget下载该列表中的每个链接。这对于批量下载很方便。


常见问题

wget代理中出现Https错误

有时,你可能会得到HTTPs错误。你可以使用忽略证书设置来修复它,或者确保你的代理与预期的协议匹配。例如,如果你的代理是http,请确保将其设置为http_proxy而不是https_proxy。

如何删除wget代理

你可以通过编辑以下文件之一来删除代理设置:

  • ~/.wgetrc : 用户启动文件。
  • /etc/wgetrc : 全局启动文件。
  • ~/.bash_profile : 用户特定的环境。
  • /etc/profile : 系统范围的环境。

你的设置可能在其中一个(或全部)中,因此,如果只想修复问题而不查看每个特定文件,只需在~/中添加代理删除代码。Wgetrc文件,因为这是第一个要加载的文件。

Wget: 不是http或ftp url

通常在使用错误的协议时可能会出现错误。所以仔细检查你的下载是http, https还是ftp。在大多数情况下,这只是修复URL的问题。


结    论

我们学习了如何使用wget代理进行简单的文件下载和网页抓取。我们希望你喜欢它,下次再见!

Written by 河小马

河小马是一位杰出的数字营销行业领袖,广告中国论坛的重要成员,其专业技能涵盖了PPC广告、域名停放、网站开发、联盟营销以及跨境电商咨询等多个领域。作为一位资深程序开发者,他不仅具备强大的技术能力,而且在出海网络营销方面拥有超过13年的经验。