wget将查询字符串附加到结果文件

时间:2013-11-08 17:19:10

标签: wget

我正在尝试使用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保存的第一个文件名。因此,保存到:之后出现的名称是我需要的名称。

然而,这是由这个奇怪的角色包裹 - 而不仅仅是删除硬编码 - 这是从哪里来的?

5 个答案:

答案 0 :(得分:5)

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

wget -p -k --adjust-extension  www.onlinetechvision.com/?p=566 
你走近了。在www.onlinetechvision.com文件夹中,* NiX系统上将存在更正扩展名为index.html@p=566.htmlindex.html?p=566.html的文件。现在很简单,即使使用脚本,也可以将该文件更改为index.html。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

我的解决方案是在wget:

之外进行递归爬行
  1. 使用wget(无文件)获取目录结构
  2. 循环从每个目录获取主条目文件(index.html)
  3. 这适用于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
    

答案 3 :(得分:0)

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

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

答案 4 :(得分:-2)

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