Como forçar o wget a converter * todos * os links baixados para os relativos?

3

Para ter uma versão offline dos tutoriais Java do Oracles¹, onde todos os links para a API Java devem apontar para a versão local também baixada dos documentos da API Java, eu uso o seguinte comando wget (procure se tentar: obtém mais de 25.000 arquivos ):

wget -mkp -nH -nv -E  --accept-regex ".*javase/8/docs/api.*|.*javase/tutorial.*" http://docs.oracle.com/javase/8/

Infelizmente, apenas uma parte dos links é convertida para apontar corretamente para os arquivos locais. Todos os arquivos em javase/tutorial são bons, mas todos os arquivos apontados para os arquivos da API baixados para javase/8/docs/api não apontam para esses arquivos locais, mas apontam para a versão online.

Alguma ideia do que está errado?

––––

¹ Eu sei que há uma versão para download dos tutoriais, mas os links da API apontam apenas para o documento on-line da API Java.

    
por Jaleks 12.01.2017 / 10:22

1 resposta

3

Parece que você encontrou um bug em wget . Eu tentei várias iterações de comandos wget tentando descobrir o porquê. Meu primeiro pensamento foi que o regex estava fazendo wget tratá-lo como dois conjuntos desconexos, e não vinculando entre eles. Eu desenvolvi uma versão não-regular para obter, aparentemente, os mesmos arquivos, convertendo as opções para forma longa e tornando-as discretas (--espelho é composto) e adicionando em um arquivo de log e mantendo os originais:

wget --recursive --convert-links --backup-converted --page-requisites --no-host-directories --level=inf --adjust-extension --include /javase/tutorial,/javase/tutorialJWS,/javase/8/docs/api https://docs.oracle.com/javase/8/index.html 2>&1 | tee wget.log

Grepping os arquivos para comparação eu encontrei o que parece cada link não convertido foi um link absoluto na fonte original. Todos os links originalmente relativos foram mantidos relativos (não realmente convertidos). A saída de wget afirma ter 'convertido' os arquivos em questão, mas apenas tags não-âncora parecem ter sido tocadas.

Eu usei as mesmas opções e os parâmetros equivalentes de --include em um site que eu controlei, depois de definir alguns links como absolutos, incluindo imagens. E obtivemos os mesmos resultados: somente tags não-âncora com endereços absolutos foram convertidos, âncoras absolutas não foram afetadas.

Para o tamanho do seu projeto, a possibilidade de converter os links para parente parece assustadora, mesmo com um script. Me deparei com um post do PerlMonk Altere links absolutos para relativos em arquivos HTML com um script em perl voltado para o problema que você agora cara.

Eu não testei, mas tem uma opção para fazer cópias de segurança como uma rede de segurança, então vale a pena tentar.

Enquanto isso, acho que você tem o privilégio de relatar um bug no wget . Apenas para referência minha versão é:

$ wget --version
GNU Wget 1.14 built on linux-gnu.

+digest +https +ipv6 +iri +large-file +nls +ntlm +opie +ssl/openssl 

Wgetrc: 
    /etc/wgetrc (system)
Locale: /usr/share/locale 
Compile: gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC="/etc/wgetrc" 
    -DLOCALEDIR="/usr/share/locale" -I. -I../lib -I../lib 
    -fmessage-length=0 -grecord-gcc-switches -O2 -Wall 
    -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables 
    -fasynchronous-unwind-tables -g 
Link: gcc -fmessage-length=0 -grecord-gcc-switches -O2 -Wall 
    -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables 
    -fasynchronous-unwind-tables -g -lproxy /usr/lib64/libssl.so 
    /usr/lib64/libcrypto.so /usr/lib64/libz.so -ldl -lz -lz -lidn 
    ftp-opie.o openssl.o http-ntlm.o ../lib/libgnu.a 
    
por 21.01.2017 / 08:59

Tags