为什么wget只下载某些网站的index.html?

时间:2012-06-20 16:46:40

标签: wget

我正在尝试使用wget命令:

wget -p http://www.example.com 

获取主页面上的所有文件。对于某些网站,它可以工作,但在大多数情况下,它只下载index.html。我已经尝试过wget -r命令,但它不起作用。任何人都知道如何获取页面上的所有文件,或者只是在页面上给我一个文件列表和相应的URL?

8 个答案:

答案 0 :(得分:83)

Wget也可以下载整个网站。但是因为这会给服务器带来沉重负担,所以wget会遵守robots.txt文件。

 wget -r -p http://www.example.com

-p参数告诉wget包含所有文件,包括图像。这意味着所有HTML文件都将看起来应该如何做。

那么如果你不希望wget遵守robots.txt文件呢?您只需将-e robots = off添加到命令中,如下所示:

 wget -r -p -e robots=off http://www.example.com

由于许多网站不允许您下载整个网站,因此他们会检查您的浏览器身份。为了解决这个问题,请使用-U mozilla,如上所述。

 wget -r -p -e robots=off -U mozilla http://www.example.com

许多网站所有者不会喜欢您下载整个网站的事实。如果服务器发现您正在下载大量文件,它可能会自动将您添加到其黑名单中。解决这个问题的方法是每次下载后等待几秒钟。使用wget执行此操作的方法是包括--wait = X(其中X是秒数。)

你也可以使用参数: - random-wait让wget选择一个等待的随机秒数。要将其包含在命令中:

wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com

答案 1 :(得分:30)

首先,澄清问题,目的是下载index.html以及该页面的所有必要部分(图像等)。 -p选项相当于--page-requisites

不总是下载页面必需条件的原因是它们通常托管在与原始页面不同的域上(例如,CDN)。默认情况下为wget refuses to visit other hosts,因此您需要使用--span-hosts选项启用主机跨越

wget --page-requisites --span-hosts 'http://www.amazon.com/'

如果您需要能够加载index.html并从本地版本加载所有页面必需品,则需要添加--convert-links选项,以便{{1}中的URL } src属性(例如)被重写为指向本地版本的相对URL。

或者,您可能还希望通过添加img选项将所有文件保存在单个“主机”目录下,或者通过添加--no-host-directories将所有文件保存在单个平面目录中选项。

使用--no-directories会导致大量文件被下载到当前目录,因此您可能希望使用--no-directories为输出文件指定文件夹名称。

--directory-prefix

答案 2 :(得分:6)

您提供的链接是主页或/index.html,因此很明显您只获得了index.html页面。对于实际下载,例如,对于“test.zip”文件,您需要在末尾添加确切的文件名。例如,使用以下链接下载test.zip文件:

  

wget -p domainname.com/test.zip

使用wget --mirror

下载完整网站

以下是您要下载完整网站并可供本地查看时要执行的命令行。

  

wget --mirror -p --convert-links -P ./LOCAL-DIR   http://www.example.com

  • -mirror:启用适合镜像的选项。

  • -p:下载正确显示给定HTML页面所需的所有文件。

  • -convert-links:下载后,转换文档中的链接 供本地观看。

  • -P ./LOCAL-DIR:将所有文件和目录保存到指定目录

使用wget -r -A

仅下载某些文件类型

您可以在以下情况下使用此功能:

  • 从网站下载所有图片

  • 从网站下载所有视频,

  • 从网站下载所有PDF文件
  

wget -r -A.pdf http://example.com/test.pdf

答案 3 :(得分:3)

我知道这个帖子已经老了,但试试Ritesh提到的:

  

- 无饼干

它对我有用!

答案 4 :(得分:3)

另一个问题可能是您正在镜像的网站使用的链接没有www。所以,如果你指定

wget -p -r http://www.example.com

它不会下载任何链接(实习)页面,因为它们来自“不同”域。如果是这种情况,请使用

wget -p -r http://example.com

代替(没有www)。

答案 5 :(得分:0)

如果您在the wget manual中查找index.html,则可以找到--default-page=name选项,默认为index.html。例如,您可以更改为index.php

--default-page=index.php

答案 6 :(得分:0)

如果你只得到index.html并且该文件看起来只包含二进制数据(即没有可读文本,只有控制字符),那么该网站可能正在使用gzip压缩发送数据。

您可以通过运行cat index.html | gunzip来确认是否输出可读的HTML。

如果是这种情况,那么wget的递归功能(-r)将无效。 wget Dim DataArray(27, 11) as Variant Dim wod as Worksheet dim rng as Range Dim d as Range Dim ArrayEnd as Integer 可以使用gzip压缩数据,但它似乎还没有出现在标准版本中。

答案 7 :(得分:0)

我在下载CFSv2模型的文件时遇到了同样的问题。我通过混合以上答案来解决它,但添加了参数--no-check-certificate

wget -nH --cut-dirs=2 -p -e robots=off --random-wait -c -r -l 1 -A "flxf*.grb2" -U Mozilla --no-check-certificate https://nomads.ncdc.noaa.gov/modeldata/cfsv2_forecast_6-hourly_9mon_flxf/2018/201801/20180101/2018010100/

这里简要说明了所用的每个参数,有关进一步的解释,请转到GNU wget 1.2 Manual

  • -nH等效于--no-host-directories:禁用主机前缀目录的生成。在这种情况下,请避免生成目录./https://nomads.ncdc.noaa.gov/

  • --cut-dirs=<number>:忽略目录组件。在这种情况下,请避免生成目录./modeldata/cfsv2_forecast_6-hourly_9mon_flxf/

  • -p等效于--page-requisites:此选项使Wget下载正确显示给定HTML页面所需的所有文件。这包括内联图像,声音和引用的样式表。

  • -e robots=off:避免下载robots.txt文件

  • -random-wait:使请求之间的时间在0.5到1.5 *秒之间变化,该时间是使用--wait选项指定的。

  • -c等同于--continue:继续获取部分下载的文件。

  • -r等效于--recursive:启用递归检索。默认最大深度为5

  • -l <depth>等效于--level <depth>:指定递归最大深度级别

  • -A <acclist>等效于--accept <acclist>:指定以逗号分隔的名称后缀或模式列表。

  • -U <agent-string>等效于--user-agent=<agent-string>:HTTP协议允许客户端使用User-Agent标头字段标识自己。这通常可以出于统计目的或跟踪协议违规而区分WWW软件。 Wget通常标识为“ Wget /版本”,版本是Wget的当前版本号。

  • --no-check-certificate:请勿对照可用的证书颁发机构检查服务器证书。