24

我正在尝试使用 wget 检索工作网页,这适用于大多数使用以下命令的网站:

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

在这些情况下,我最终会得到 index.html 和所需的 CSS/JS 等。

但是,在某些情况下,url 会有一个查询字符串,在这些情况下,我会得到一个 index.html,并附加了查询字符串。

例子

www.onlinetechvision.com/?p=566

结合上面的 wget 命令会产生:

index.html?page=566

我试过使用 --restrict-file-names=windows 选项,但这只会让我

index.html@page=566

谁能解释为什么需要这样做以及我如何才能得到一个常规的 index.html 文件?

更新:我对采取不同的方法有点犹豫。我发现我可以通过解析输出来获取 wget 保存的第一个文件名。所以保存到之后出现的名字是我需要的。

然而,这被这个奇怪的字符包裹着——而不是仅仅删除那个硬编码——这是从哪里来的?

4

5 回答 5

7

如果您尝试使用参数“--adjust-extension”

wget -p -k --adjust-extension  www.onlinetechvision.com/?p=566 

你靠近一点。在 www.onlinetechvision.com 文件夹中,将有具有更正扩展名的文件:index.html@p=566.htmlindex.html?p=566.html在 *NiX 系统上。即使使用脚本,现在也很容易将该文件更改为 index.html。

如果您使用的是 Microsoft 操作系统,请确保您拥有最新版本的 wget - 它也可以在此处获得:https ://eternallybored.org/misc/wget/

于 2015-11-05T09:58:37.680 回答
1

要回答您关于为什么需要这样做的问题,请记住,Web 服务器可能会根据查询字符串中的参数返回不同的结果。如果查询index.html?page=52从 中返回不同的结果index.html?page=53,您可能不希望将两个页面保存在同一个文件中。

每个使用不同查询参数集的 HTTP 请求实际上都是对不同资源的请求。wget 无法预测这些更改中的哪些是重要的,哪些不会是重要的,因此它正在做保守的事情并将查询参数 URL 保留在本地文档的文件名中。

于 2015-11-05T05:24:39.303 回答
0

我的解决方案是在 wget 之外进行递归爬取:

  1. 使用 wget 获取目录结构(无文件)
  2. 循环从每个目录获取主入口文件(index.html)

这适用于 wordpress 网站。可能会错过一些页面。

#!/bin/bash

#
# get directory structure
#
wget --spider -r --no-parent  http://<site>/

#
# loop through each dir
#
find . -mindepth 1 -maxdepth 10 -type d | cut -c 3- > ./dir_list.txt

while read line;do
        wget --wait=5  --tries=20 --page-requisites --html-extension --convert-links --execute=robots=off --domain=<domain> --strict-comments http://${line}/

done < ./dir_list.txt
于 2015-03-17T13:57:41.607 回答
0

由于网站设计,需要查询字符串,该网站正在对所有内容使用相同的标准 index.html,然后使用查询字符串从另一个页面中提取内容,例如服务器端的脚本。(如果您查看 JavaScript,它可能是客户端)。

您是否尝试过使用 --no-cookies 它可能会通过 cookie 存储此信息并在您点击页面时将其拉出。这也可能是由 URL 重写逻辑引起的,您几乎无法从客户端控制。

于 2015-11-05T13:53:59.040 回答
-2

使用 -O 或 --output-document 选项。见http://www.electrictoolbox.com/wget-save-different-filename/

于 2013-11-08T17:28:03.343 回答