我正在尝试使用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保存的第一个文件名。因此,保存到:之后出现的名称是我需要的名称。
然而,这是由这个奇怪的角色包裹 - 而不仅仅是删除硬编码 - 这是从哪里来的?
答案 0 :(得分:5)
如果您尝试使用参数" - adjust-extension"
wget -p -k --adjust-extension www.onlinetechvision.com/?p=566
你走近了。在www.onlinetechvision.com文件夹中,* NiX系统上将存在更正扩展名为index.html@p=566.html
或index.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:
之外进行递归爬行这适用于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/