Quando vou a esta página da web ( https://imgur.com/user/Ultraruben/submitted por exemplo) e pressiono Ctrl+u
, recebo uma página da web. Quando tento extrair o html pela linha de comando curl <url>
ou curl -L <url>
recebo outro.
lynx -dump <url>
também não funciona (sem javascript).
Eu preciso passar pela linha de comando (com qualquer ferramenta que funcione) da mesma forma que recebo pelo meu navegador com Ctrl+u
.
Isto é o que eu consegui através do navegador Opera: https://justpaste.it/42ci1 E isso é com curl: https://justpaste.it/9oy3g
É muito comum que os sites reajam ao tipo de cliente que estão vendo com conteúdo diferente.
Parte disso é bem-intencionada: por exemplo, alguns sites se esforçam para oferecer suporte a telefones incrivelmente antigos ou PCs com Windows. Do ponto de vista da segurança, você gostaria de dizer a um usuário do Internet Explorer 5 que ele precisa atualizar - mas seu trabalho pode ser ajudar a levar informações de saúde ao público, não dizer às pessoas sem dinheiro que elas precisam comprar um novo laptop.
Às vezes, você precisa oferecer suporte a um dispositivo de jogo antigo com um site especificamente peculiar para deixar seu navegador feliz ou entregar uma versão do site otimizada para a tela.
De qualquer forma, é provavelmente o que está acontecendo aqui; seu curl envia "Ei, eu sou curl", o servidor da web reage com uma página específica para ferramentas automatizadas, não para navegadores.
Então, primeiro: verifique se as coisas resolvem se você disser ao curl para usar o mesmo user agent que seu navegador principal. Talvez isso já resolva as coisas.
Se você diz que o lynx não funciona porque não faz JavaScript, então, bem, você precisa de algo que faça todo o JavaScript que um navegador moderno faz. Isso significa que ele precisa ser um navegador moderno. Existem maneiras de criar marionetes em navegadores a partir de uma linha de comando. Em essência, você está procurando por WebDriver .
Isso não funcionará sem você escrever algumas linhas de script. A documentação do WebDriver da Mozilla tem um exemplo que pode ajudar você a começar. Você desejará adicionar um pouco de espera (na conclusão do carregamento, mais algumas frações de segundo) para permitir que o JavaScript seja concluído, antes de obter o código-fonte. O exemplo faz isso esperando que um elemento específico comece a existir.
Use a opção
-H
para definir oUser-Agent
cabeçalho .Se você usa o Firefox, pode abrir o analisador de rede e clicar com o botão direito do mouse em uma solicitação de obtenção. Em seguida, selecione "Copiar como endereço cURL" no menu de contexto. Para o URL
cr.yp.to
, você receberá o seguinte comando: