Estou baixando a página de origem HTML de um site usando o cURL
comando O problema é que eu não quero a maior parte do conteúdo da página. Eu só preciso das 100 primeiras linhas da página de origem. Existe uma maneira de interromper o download da página após as primeiras linhas?
Atualmente, tenho o comando abaixo funcionando, mas ele não parece ser eficaz em termos de tempo.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
Eu tentei alterar o valor de 1
a .5
e .05
e ainda toda a página web está sendo baixado.
Estou olhando menos de um segundo para executar o comando acima.
EDITAR
Na página do manual cURL
, vejo que " Você também deve estar ciente de que muitos servidores HTTP / 1.1 não têm esse recurso ativado. Assim, quando você tenta obter um intervalo, obtém o documento inteiro " . o servidor não suporta a consulta de intervalo, existe algum outro comando no nix
ambiente que me ajudará a realizar o que estou tentando fazer?
Ainda não testei esse aplicativo em particular, mas algo me diz que você pode emparelhar dd e nc aqui:
O Netcat (
nc
) pode exigir uma configuração adicional para acertar os cabeçalhos das solicitações, mas se for um site público, você poderá conseguir uma saída útil se desejar o suficiente para tentar. Certamente, o dd terá apenas a quantidade de entrada que você especificar e sair, o que fará o SIGPIPE netcat, para que ele siga imediatamente o exemplo. O único truque real é passar o aperto de mão inicial - depois de iniciar o fluxo, você pode soltá-lo quando quiser.EDITAR
A leitura dos comentários de slm me levou a apoiar essa moção; se você pode serializar um JSON POST no formato correto, esse é definitivamente o caminho a seguir para obter respostas mais oportunas. Analisar HTML é para os pássaros, de qualquer maneira.
Um truque útil para esse fim é capturar o fluxo da rede enquanto se comunica com o servidor no navegador e, quando o navegador envia o POST com o que você deseja, envie-o novamente como um GET e, em vez disso, analisa os resultados.
fonte
O
head
comando normalmente interrompe o download antes de terminar (embora, para arquivos curtos, ele possa preencher o buffer do pipe antes que o pipe seja fechado). Isso ocorre porque quando um canal é fechado,curl
não há onde gravar (o descritor de arquivo é fechado, a gravação falha).No entanto, na minha experiência, a coisa mais longa ao baixar está aguardando solicitações de DNS (doloroso quando você está baixando centenas de arquivos sequencialmente). Isso pode ser ajudado com um cache DNS local como
dnsmasq
, ou, se você estiver usando o mesmo nome de domínio várias vezes com uma estrutura de diretório diferente, apenas resolva-o para um IP uma vez e faça uma substituição no URL.Para provar meu argumento ... tente
time netstat
versustime netstat -n
(sem cache, a diferença é dramática, com cache, é ruim apenas na primeira vez e depois se lembra).fonte