Escapando cadeias de consulta com wget --mirror

15

Estou usando wget --mirror --html-extension --convert-linkspara espelhar um site, mas acabo com muitos nomes de arquivos no formato post.php?id=#.html. Quando tento visualizá-las em um navegador, ele falha, porque o navegador ignora a sequência de consultas ao carregar o arquivo. Existe alguma maneira de substituir o ?personagem nos nomes de arquivos por outra coisa?


A resposta do --restrict-file-names=windowsfuncionou corretamente. Em conjunto com os sinalizadores --convert-linkse --adjust-extension/ -E(anteriormente chamado --html-extension, que também funciona, mas está obsoleto), ele produz um espelho que se comporta conforme o esperado.

wget  --mirror --adjust-extension --convert-links --restrict-file-names=windows http://www.example
PILHA DE ABANDONO - Jeremy Banks
fonte

Respostas:

16

Veja a --restrict-file-namesopção Embora não seja exatamente para esse fim específico, --restrict-file-names=windowsprovavelmente o ajudará:

--restrict-file-names = modes

Altere quais caracteres encontrados em URLs remotos devem ser escapados durante a geração de nomes de arquivos locais. [...]

Quando "janelas" é fornecida, o Wget escapa dos caracteres \, |, /,:,?, ", *, <,> E os caracteres de controle nos intervalos de 0 a 31 e 128 a 159. , O Wget no modo Windows usa + em vez de: para separar host e porta em nomes de arquivos locais e @ em vez de? Para separar a parte da consulta do nome do arquivo do restante.Portanto, uma URL que seria salva como www. xemacs.org:4300/search.pl?input=blah no modo Unix seria salvo como www.xemacs.org+4300/search.pl@input=blah no modo Windows.

peth
fonte
2

Seu navegador o exibirá bem se você usar um URL como

file:///tmp/example.com/post.php%3Fid=1.html

ao invés de

file:///tmp/example.com/post.php?id=1.html

Nota: se você está tendo problemas com links internos de arquivos baixados, seria porque você encerrou o wget antes de concluir o download. Como você especificou --convert-links e --html-extension (aplica-se apenas quando são fornecidos), o wget normalmente corrigia os links para usar% 3F em vez de?; no entanto, isso ocorre no final, após o término do download; se tiver sido interrompido, não terá corrigido nenhum dos links e você ficará nessa situação. Claro, você sempre pode escrever um script para percorrer e corrigir os links, mas ...

Micah Cowan
fonte
este não é totalmente correcta, wget, sem interrupção, para uma URL como http://site.com/article.cgi?25será guardado como article.cgi?25.htmlver secção 2.7 na gnu.org/software/wget/manual/wget.html#HTTP-Options
Tzury Bar Yochay
-2

O wget não tem uma opção para modificar o nome salvo. O que você provavelmente precisará fazer é criar um script para passar e substituir? com _ ou algo semelhante. Apenas o Wget não pode fazer isso.

8BitsOfGeek
fonte