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

Jay*_*y H 44 wget

我正在尝试使用wget命令:

wget -p http://www.example.com 
Run Code Online (Sandbox Code Playgroud)

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

Rit*_*ora 85

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

 wget -r -p http://www.example.com
Run Code Online (Sandbox Code Playgroud)

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

那么如果你不希望wget服从robots.txt文件怎么办?你可以简单地将-e robots = off添加到命令中,如下所示:

 wget -r -p -e robots=off http://www.example.com
Run Code Online (Sandbox Code Playgroud)

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

 wget -r -p -e robots=off -U mozilla http://www.example.com
Run Code Online (Sandbox Code Playgroud)

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

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

wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
Run Code Online (Sandbox Code Playgroud)

  • @JayH尝试不使用将被重定向的地址.IE如果使用```http:// amazon.com```它将无效,因为你将被重定向到www.amazon.com,但如果你使用```http://www.amazon .com```它将开始下载所有网站.不遵循机器人文件的能力不是那么"礼貌",所以它不会像你想象的那样好. (5认同)
  • 感谢您的回答.我尝试了你在一些常见网址上提到的3种方式(例如amazon.com),但我得到的只是index.html.你还有其他建议吗? (4认同)
  • 同样在这里.只有index.html (4认同)
  • 我讨厌网站底部最有价值的答案 (2认同)

Alf*_*ton 32

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

不总是下载页面必需条件的原因是它们通常托管在与原始页面不同的域上(例如,CDN).默认情况下,wget拒绝访问其他主机,因此您需要使用该--span-hosts选项启用主机跨越.

wget --page-requisites --span-hosts 'http://www.amazon.com/'
Run Code Online (Sandbox Code Playgroud)

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

或者,您可能还希望通过添加--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/'
Run Code Online (Sandbox Code Playgroud)


小智 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

  • 谢谢。`--mirror` 选项最终使它对我有用。 (2认同)

jor*_*jor 5

另一个问题可能是您镜像的站点使用的链接不带www. 所以如果你指定

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

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

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

相反(没有www)。

  • 正确观察。这是我的问题的根本原因。 (2认同)

小智 5

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

\n\n

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/

\n\n

这里对使用的每个参数进行了简要说明,有关进一步的说明,请参阅GNU wget 1.2 手册

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

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

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

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

  • \n
  • -random-wait:导致请求之间的时间在 0.5 到 1.5 * 秒之间变化,其中使用--wait选项指定。

  • \n
  • -c相当于--continue:继续获取部分下载的文件。

  • \n
  • -r相当于--recursive:打开递归检索。默认最大深度为 5

  • \n
  • -l <depth>相当于--level <depth>:指定递归最大深度级别

  • \n
  • -A <acclist>相当于--accept <acclist>:指定要接受的名称后缀或模式的逗号分隔列表。

  • \n
  • -U <agent-string>相当于--user-agent=<agent-string>:HTTP 协议允许客户端使用 User-Agent 标头字段来标识自己。这使得能够区分 WWW 软件,通常用于统计目的或跟踪协议违规。Wget 通常标识为 \xe2\x80\x98Wget/version\xe2\x80\x99,版本是 Wget 的当前版本号。

  • \n
  • --no-check-certificate:不要根据可用的证书颁发机构检查服务器证书。

  • \n
\n