为什么wget忽略url中的查询字符串?

时间:2014-10-20 20:37:08

标签: shell command-line wget

我想用wget下载以下18个html文件:

http://www.ted.com/talks/quick-list?sort=date&order=desc&page=18  
http://www.ted.com/talks/quick-list?sort=date&order=desc&page=17  
...  
http://www.ted.com/talks/quick-list?sort=date&order=desc&page=1

无论page=之后发生什么,它总是会下载列表的第一页。我是否必须逃避网址中的某些字符?怎么样?

3 个答案:

答案 0 :(得分:41)

&是大多数shell环境中的特殊字符,您可以使用双引号引用URL以将整个内容作为参数传递给wget

wget "http://www.ted.com/talks/quick-list?sort=date&order=desc&page=18"

答案 1 :(得分:3)

  1. 将您的网址列表存储在一个文件中(每个网址都在一个单独的行中!!):

    echo "http://www.ted.com/talks/quick-list?sort=date&order=desc&page=18 http://www.ted.com/talks/quick-list?sort=date&order=desc&page=17 ... " > wget_filelist.txt

  2. 调用wget来检索内容:

    wget -i wget_filelist.txt

答案 2 :(得分:1)

特殊情况:wget "URL"格式仍然存在问题,即使它解决了&的问题,也无法传递!符号。

解决方案:URL的单引号而不是双引号将解决此问题,例如:

wget 'https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-G.798-201712-I!!PDF-E&type=items'

如上面的示例所示,它对我有用,其中同时包含&!符号。我不确定这是否是所有平台的例外解决方案(例如,官方POSIX shell)。

奖金:此外,我们可以使用wget -c 'URL',这样一来如果失败,就无需从头开始。