我正在尝试使用wget命令:
wget -p http://www.example.com
如何获取主页面上的所有文件。对于一些网站,这可能有效,但在大多数情况下,它只能下载index.html。我尝试了wget -r命令,但它无效。有人知道如何获取页面上的所有文件,或者只是给我一个文件列表和相应的URL?
我正在尝试使用wget命令:
wget -p http://www.example.com
如何获取主页面上的所有文件。对于一些网站,这可能有效,但在大多数情况下,它只能下载index.html。我尝试了wget -r命令,但它无效。有人知道如何获取页面上的所有文件,或者只是给我一个文件列表和相应的URL?
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
wget -r -p -e robots=off -U mozilla http://www.example.com
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
http://amazon.com
,它将无法正常工作,因为你将被重定向到www.amazon.com
,但是如果你使用http://www.amazon.com
,则可以下载整个网站。忽略机器人文件并不太礼貌,所以它的效果可能不如你想象的那么好。 - Stefano Falsetto--random-wait
之外,还可以使用参数 -w X
,其中 X
是以秒为单位的时间,并用作计算随机等待时间的基础值。 - S.I.首先,为了澄清问题,目的是下载index.html
和该页面的所有必需部分(图像等)。 -p
选项相当于--page-requisites
。
页面需求不总是被下载的原因在于它们通常托管在与原始页面不同的域上(例如CDN)。默认情况下,wget拒绝访问其他主机,因此您需要使用--span-hosts
选项启用主机跨度。
wget --page-requisites --span-hosts 'http://www.amazon.com/'
如果您需要能够加载index.html
并使所有页面必需品从本地版本加载,您需要添加--convert-links
选项,以便--no-host-directories
选项将所有文件保存在单个“主机”目录下,或者通过添加--no-directories
选项将所有文件保存在单个扁平目录中。--no-directories
将导致许多文件下载到当前目录,因此您可能希望使用--directory-prefix
为输出文件指定文件夹名称。wget --page-requisites --span-hosts --convert-links --no-directories --directory-prefix=output 'http://www.amazon.com/'
http://indiabix.com/civil-engineering/questions-and-answers/
,我希望wget访问每个类别/章节并下载所有图像,包括左侧边栏中每个部分中每个页面上的所有图像。请注意,这里的图像是指所有问题中涉及的数学公式的图像。
问题在于下载在下载index.html后停止了。如果有一个可行的示例就太好了! - Naveen--mirror
选项是最直接的方法,可能已经足够满足您的需求。 - Alf Eatonwget -rkEpHN -e robots=off -U mozilla http://www.yinwang.org/
和 wget -rkEpHN -Dyinwang.org -e robots=off -U mozilla http://www.yinwang.org/
。请检查结果。 - Evan Hu使用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
仅下载特定文件类型
您可以在以下情况下使用此功能:
从网站下载所有图片,
从网站下载所有视频,
wget -r -A.pdf http://example.com/test.pdf
--mirror
选项最终让我成功了。 - vergenzt另一个问题可能是您要镜像的站点使用没有 www
的链接。因此,如果您指定
wget -p -r http://www.example.com
它将不会下载任何链接的(内部)页面,因为它们来自于“不同”的域名。如果是这种情况,则使用
wget -p -r http://example.com
代替(去掉 www
)。
我在下载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手册。
-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/version”为身份标识,其中版本是Wget当前版本号。
--no-check-certificate
:不检查服务器证书与可用证书颁发机构的匹配性。
我知道这个帖子有点旧,但是可以尝试一下Ritesh提到的方法:
--no-cookies
对我来说起作用了!
index.html
文件,并且该文件看起来只包含二进制数据(即没有可读的文本,只有控制字符),那么该站点可能正在使用 gzip
压缩传输数据。cat index.html | gunzip
来确认这一点,以查看是否输出可读的 HTML。wget
的递归功能(-r
)将无法工作。对于 wget
来处理 gzip 压缩的数据,有一个 patch,但似乎尚未在标准版本中发布。index.html
,您可以找到一个选项--default-page=name
,默认情况下为index.html
。 您可以更改为例如index.php
。--default-page=index.php