Wget não fará download recursivamente

5

Estou tentando copiar um tópico do fórum com essa estrutura de diretórios:

A primeira página tem um URL como este:

https://some.site.com/foo/bar/threadNumber

E o resto das páginas seguem este formato:

https://some.site.com/foo/bar/threadNumber/page/2
https://some.site.com/foo/bar/threadNumber/page/3
https://some.site.com/foo/bar/threadNumber/page/*

Estou usando o comando:

wget --recursive --page-requisites --adjust-extension --no-parent --convert-links https://some.site.com/foo/bar/threadNumber

Este comando pode copiar qualquer URL simples. No entanto, quero colocar no diretório superior e obter todos os arquivos /page/* também. Eu não quero diretórios superiores, e nada mais do que os arquivos /page/ inferiores. Eu também joguei --mirror na mistura sem sucesso.

Alguma idéia de por que esse comando não está baixando o restante das páginas?

    
por Josh B. 20.02.2017 / 22:41

3 respostas

3

Download recursivamente de links com uma verificação de segurança, resultando em um redirecionamento de loop.

O comando não está funcionando porque o seu site usa o redirecionamento duplo que confunde o wget. Vamos ver o log detalhado que pode ser invocado com a opção --debug (linhas irrelevantes removidas):

---request begin---
GET /<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/auth/securityCheck?action=bounce&referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL>
(...)
---request begin---
GET /auth/securityCheck?referrer=https%3A%2F%2Fcommunity.lego.com%2F<URL> HTTP/1.1
---response begin---
HTTP/1.1 302 Found
Location: https://community.lego.com/<URL>
(...)
Deciding whether to enqueue "https://community.lego.com/<URL>".
Already on the black list.
Decided NOT to load it.
Redirection "https://community.lego.com/<URL>" failed the test.

Como visto, ele envia seu pedido para uma "verificação de segurança" e volta. O Wget não espera ser redirecionado pela segunda vez para a mesma página que você veio, e trata-o como uma lista negra, portanto, não segue nenhum link.

Embora seja absolutamente possível que haja uma maneira de fazer alguma mágica de cookie para fazer com que o redirecionamento da verificação de segurança não aconteça, eu não sei como fazer isso.

No entanto, se você estiver disposto a recompilar o wget manualmente, a correção para o seu problema pode ser trivial: basta adicionar essas duas linhas em src/recur.c .

            status = retrieve_url (url_parsed, url, &file, &redirected, referer,
                                   &dt, false, i, true);
+
+         if (redirected)
+                 hash_table_remove (blacklist, url);

            if (html_allowed && file && status == RETROK
                && (dt & RETROKF) && (dt & TEXTHTML))

Isso removerá a página atual da lista negra toda vez que você for redirecionado, corrigindo assim o seu problema.

Esteja avisado que isso pode provocar loops infinitos em alguns casos, por isso não é um patch pronto para envio.

Depois de reconstruir o wget, você pode usar algo como %código% para buscar todo o seu segmento conforme pretendido.

    
por 26.02.2017 / 13:19
1

Tente este:

wget -nv --mirror --span-hosts --convert-links --adjust-extension --page-requisites --no-parent https://some.site.com/foo/bar/threadNumber

Esses comandos obtêm o segmento inteiro com todos os elementos de todos os sites. Você pode limitá-lo por tipos, --accept html,gif,png,jpg,jpeg , por exemplo.

    
por 23.02.2017 / 20:29
0

Apenas pensando alto aqui ... e algo parecido com o webhttrack? ou primeiro executar através do jmeter - > lista de exportação de links - > então usar wget ou curl?

UPDATE Apenas testei com o webhttrack, aquele está trabalhando para o trabalho e pode ser usado tanto no CLI quanto no Gui ....

    
por 02.03.2017 / 01:36