在这篇文章中,你将研究如何使用wget命令,用代理服务器检索或传输数据。代理服务器经常被称为你和世界网络之间的网关,可以使访问数据更加安全。但让我们开始吧!
准备条件和安装
这篇文章适用于广泛的开发人员,但为了获得最大的材料,建议:
- 熟悉Linux和unix的命令和论据。
- 已安装wget。
通过打开终端并键入,检查wget是否已经安装:
$ wget -V
如果它存在,它将返回版本。如果没有,请按照以下步骤在Mac或Windows上下载wget。
在Mac上下载wget
建议使用软件包管理器(如Homebrew)在Mac上安装wget的方法。
你可以通过运行Homebrew来安装wget:
$ brew install wget
你可以通过重新运行之前的命令查看其当前版本来检查安装是否成功。
在Windows上下载wget
要安装和配置Windows的wget。
- 下载wget for Windows并安装该软件包。
- 将wget.exe文件复制到你的C:\Windows\System32文件夹。
- 打开命令提示符(cmd.exe),运行wget以检查它是否被成功安装
仍然有问题吗?这里有一个额外的视频,显示如何在Windows 10上安装wget。
什么是wget?
wget是一个GNU命令行工具,主要用于从互联网下载内容。它支持HTTP、HTTPS和FTP协议。
wget被设计成在缓慢或不稳定的网络连接中也能有效可靠地运行。因此,如果下载在完成之前由于网络错误而停止,wget会自动从它离开的地方继续进行同样的下载。并重复这一过程,直到整个文件被成功检索。
该工具也作为网络爬虫工作,从HTML页面中爬取链接的资源并依次下载。它重复这一过程,直到获得所有的内容下载或用户指定的递归深度。之后,检索到的数据被保存在一个镜像远程服务器的目录结构中,从而通过HTTP创建一个网页的克隆。
wget是多功能的,这是它变得如此流行的另一个原因,它可以用于脚本、终端和cron作业。更不用说这个工具是非交互式的,在后台独立运行,这意味着在下载发生时,如果你是主动登录的,也没有关系。
说到下载,wget工具甚至支持通过HTTP代理下载。代理服务器是任何在网络或协议之间翻译流量的机器。代理服务器是一个中间服务器,将终端用户客户端与他们浏览的目的地分开。代理服务器可能存在于学校、工作场所和其他机构,用户需要认证才能访问互联网,在某些情况下,限制用户访问某些网站。
当你使用代理服务器时,流量通过代理服务器流向被请求的地址。然后,请求通过同一服务器返回,尽管这可能并不总是如此,该服务器将收到的数据从被请求的网页转发回给你。
由于代理服务器,你可以更安全地从世界范围内下载内容。在这篇文章中,你将研究如何通过在代理服务器后面使用wget。
wget命令
如果你不熟悉wget,该工具使用一个相当重复的语法。它有两个参数。[OPTION]和[URL]。
wget [OPTION]... [URL]...
-
OPTION:决定如何处理给定的参数。要查看所有的wget命令,请运行
wget -h
。 -
URL:你想下载/同步的文件或目录的URL。你可以一次调用多个OPTIONS或URL。
现在你已经学会了wget冗长乏味的语法,现在是时候学习一些命令了。
下载单个文件
要下载一个普通文件,请运行:
$ wget https://example.com/scraping-bee.txt
你甚至可以设置wget在服务器上的最新版本比本地拷贝新的情况下检索数据。与其运行前面的命令,你不如先用-S
提取文件,以保持初始提取的时间戳,以及之后的任何提取:
$ wget -S https://example.com/scraping-bee.txt
接下来,为了检查文件是否有改动,如果有的话就下载它,你可以运行:
$ wget -N https://example.com/scraping-bee.txt
如果你想下载内容并将其保存为HTML页面的标题,请运行这个:
wget '...' > tmp && name=$(gawk '...' tmp) && mv tmp "$name"
根据需要在名称中使用/。
下载文件到一个特定的目录
只要用你想保存文件的输出目录位置替换PATH即可:
$ wget ‐P https://example.com/sitemap.xml
重新命名下载的文件
要重新命名一个文件,用你想要的名字替换FILENAME,然后运行:
$ wget -O https://example.com/file.html
将自己定义为用户代理(User-Agent)
$ wget --user-agent=Chrome https://example.com/file.html
限制速度
爬取礼仪的一部分是不要抓取得太快。值得庆幸的是,wget可以通过执行--wait
和--limit-rate
命令来帮助解决这个问题:
--wait=1 \\ Wait 1 second between extractions. --limit-rate=10K \\ Limit the download speed (bytes per second)
作为谷歌机器人进行提取
$ wget --user-agent="Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" https://example.com/path
转换页面上的链接
将HTML中的链接转换为在你的本地版本中仍然有效。(例如:example.com/path -> localhost:8000/path)
$ wget --convert-links https://example.com/path
镜像单个网页
你可以运行这个命令来镜像一个网页,在你的本地设备上查看它:
$ wget -E -H -k -K -p --convert-links https://example.com/path
提取多个URL
首先创建并添加所有需要的URL到urls.txt
文件
https://example.com/1 https://example.com/2 https://example.com/3
接下来,运行以下命令,提取所有的URL:
$ wget -i urls.txt
这涵盖了最常用的wget命令,但请随时查看更多的命令。
如何用wget配置一个代理服务器
首先在/usr/local/etc/wgetrc(全局,适用于所有用户)或$HOME/.wgetrc(单用户)中找到wget初始化文件。你也可以查看这里的文档,看一个wget初始化文件.wgetrc的样本。
1. 在初始化文件中加入以下几行
https_proxy = http://[Proxy_Server]:[port] http_proxy = http://[Proxy_Server]:[port] ftp_proxy = http://[Proxy_Server]:[port]
2. 设置代理变量。
wget可以识别以下环境变量来指定代理位置。
-
http_proxy/https_proxy:应该分别包含HTTP和HTTPS连接的代理的URL。
-
ftp_proxy: 应该包含FTP连接的代理的URL。通常情况下,http_proxy和ftp_proxy被设置为同一个URL。
-
no_proxy: 应该包含一个逗号分隔的域名扩展名列表,proxy不应该被使用。
除了环境变量,代理的位置和设置也可以在wget内部使用"--no proxy
“和"proxy = on/off "
命令来指定)
。注意,这可能会抑制代理的使用,即使正确的环境变量已经到位。
在shell中,你可以通过运行来设置变量:
$ export http_proxy=http://[Proxy_Server]:[port] $ export https_proxy=$http_proxy $ export ftp_proxy=$http_proxy
3. 最后,在你的~/.bash_profile或/etc/profile中添加以下几行:
export http_proxy=http://[Proxy_Server]:[port] export https_proxy=http://[Proxy_Server]:[port] export ftp_proxy=http://[Proxy_Server]:[port]
一些代理服务器需要授权才能使用,通常由用户名和密码组成,使用wget发送。与HTTP授权类似,虽然存在几种认证方案,但只有Basic认证方案被积极实施。
你可以通过代理网址或命令行选项输入你的用户名和密码。在一个并不罕见的情况下,一个公司的代理位于proxy.company.com
,端口为8001,一个包含授权内容的代理URL可能看起来像这样:
http://hniksic:[email protected]:8001/ [文中代码源自Scrapingbee]
另外,你可以利用 “proxy-user “和 “proxy-password “选项,以及相应的.wgetrc设置proxy_user和proxy_password,来设置代理用户名和密码。
4. 你成功了!现在用你的代理来获取你的数据。
总 结
现在你是一个wget代理专家,你现在可以自由支配,从网站上提取几乎任何你想要的东西。wget是一个免费和用户友好的工具,看起来它不会很快离开,所以去熟悉它。希望这篇文章能够帮助你开始你的旅程,并wget所有需要的数据!
cURL也支持代理使用,你可以在《如何用cURL配置代理》一文中看到如何做到这一点。