Estoy descargando la página fuente HTML de un sitio web usando el cURL
comando. El problema es que no quiero la mayoría de los contenidos en la página. Solo necesito las primeras 100 líneas de la página de origen. ¿Hay alguna manera de detener la descarga de la página después de las primeras líneas?
Actualmente, tengo el siguiente comando funcionando pero no parece ser efectivo en el tiempo.
curl -r[0-1] "http://www.freebase.com/m/045c7b" > foo.txt
He intentado cambiar el valor de 1
a .5
y .05
y aún toda la página web se está descargando.
Estoy mirando a menos de un segundo para ejecutar el comando anterior.
EDITAR
Desde la página de manual de cURL
, veo que " También debe tener en cuenta que muchos servidores HTTP / 1.1 no tienen esta característica habilitada, de modo que cuando intente obtener un rango, en su lugar obtendrá el documento completo " . el servidor no admite las consultas de rango, ¿hay algún otro comando en el nix
entorno que me ayude a lograr lo que estoy tratando de hacer?
Realmente no he probado esta aplicación en particular todavía, pero algo me dice que puedes emparejar dd y nc aquí:
Netcat (
nc
) puede requerir una configuración adicional para obtener los encabezados de solicitud correctos, pero si se trata de un sitio público, debería poder encontrar una salida útil si le interesa lo suficiente como para intentarlo. Ciertamente, dd tomará solo la cantidad de información que especifique y salga, lo que SIGPIPE netcat lo hará inmediatamente. El único truco real es resolver el apretón de manos inicial: una vez que inicie la transmisión, puede soltarla cuando lo desee.EDITAR
Leer los comentarios de slm me ha llevado a apoyar esa moción; Si puede serializar un JSON POST en el formato correcto, ese es definitivamente el camino a seguir para obtener una respuesta más oportuna. Analizar HTML es para los pájaros, de todos modos.
Un truco útil para ese fin es capturar su flujo de red mientras se comunica con el servidor en su navegador, luego, cuando su navegador envía la POST que le brinda lo que desea, envíelo nuevamente como GET y eche un vistazo a los resultados.
fuente
El
head
comando generalmente detendrá la descarga antes de que finalice (aunque para archivos cortos puede llenar el búfer de la tubería antes de que se cierre la tubería). Esto se debe a que cuando una tubería está cerrada,curl
no tiene dónde escribir (el descriptor de archivo está cerrado, la escritura falla).Sin embargo, en mi experiencia, lo más largo al descargar es esperar solicitudes de DNS (doloroso cuando descargas cientos de archivos secuencialmente). Esto se puede ayudar con un caché de DNS local como
dnsmasq
, o si está utilizando el mismo nombre de dominio muchas veces con una estructura de directorio diferente, simplemente resuélvalo a una IP una vez y reemplace la URL.Para probar mi punto ... intente
time netstat
versustime netstat -n
(sin caché la diferencia es dramática, con caché, solo es malo la primera vez, luego recuerda).fuente