2009-01-06 9 views
8

Necesitamos sondear una página web cada 5 minutos y la página web está creciendo bastante grande. La página web es una lista de directorios y necesitamos la última línea (para obtener un nombre de archivo). ¿Cuál es la mejor manera de obtener solo esta última línea?¿es posible leer las últimas líneas (o 1000 caracteres) de una página web grande?

(Si se tratara de un archivo local podría retroceder un poco en relación con el final del archivo y leer).

+0

¿Qué lenguaje de programación está utilizando? – Superdumbell

+0

¿Por qué se bajó este voto? No especificar el lenguaje de programación es apenas una razón. – BobbyShaftoe

+0

upvoting para compensar la locura. – NotMe

Respuesta

13

HTTP 1.1 es compatible con un conjunto de encabezados para solicitar solo un determinado rango de bytes, incluida la compatibilidad con solo los últimos n bytes de un archivo (utilizando el formato de "sufijo"). Ver here. Por ejemplo,

Range: bytes=-1000 

para los últimos 1000 bytes. (Suponiendo que el servidor es compatible con el encabezado del rango, por supuesto)

1

Usted tiene dos opciones:

  1. Uso fragmentada codificación. Consulte http://msdn.microsoft.com/en-us/library/aa287673.aspx Preste atención al campo del encabezado de solicitud de rango. También tu servidor debe soportarlo.

  2. Use FTP y realice un "reinicio" en el comando ftp con el desplazamiento que necesita.

2

HTTP hace de soporte chunked respuestas que significa que es probable que pueda pedir la misma página, pero pidiendo con un desplazamiento diferente IIRC. Compruebe el HTTP RFCs.

EDITAR: después de verificar RFC-2616, es el rango: el encabezado HTTP que desea.

0

Utilice FTP y reanudar programáticamente?

0

Puede hacer esto en python usando una combinación de urllib2 (integrado) y el módulo Beautiful Soup 3rd Party (easy_install BeautifulSoup).

Tendrá que cargar toda la página independientemente ya que los datos se transmiten a su máquina local en orden. Sin embargo, urllib2 facilita la conexión y recuperación de la página, y Beautiful Soup convertirá el HTML sin formato en una jerarquía de navegación fácil que puede recorrer con "sintaxis de punto".

import urllib2 
from BeautifulSoup import BeautifulSoup 

page = urllib2.urlopen(url) 
html = page.read() 
soup = BeautifulSoup(html) 
# assumes you're looking for a tag in the body with an id='last-line' attribute on it 
tag = soup.html.body.find(id='last-line') 
# this will print a list of the contents of the tag 
print tag.contents 
# if only text is inside the tag you can use this 
print tag.string 
-2

Un truco sucio sería para abrirlo en Word y grabar una macro para agarrar la última línea (lo que podría implicar la supresión de mesas, etc.)

El siguiente código VBA abre el Google definen resultado para " desbordamiento de pila" y elimina la cabecera y el pie, dejando sólo la lista de resultados:

Sub getWebpage() 

Documents.Open FileName:="http://www.google.com/search?hl=en&safe=off&rls=com.microsoft%3A*&q=define%3A+stack+overflow" 

With Selection 
    .MoveDown Unit:=wdLine, Count:=8, Extend:=wdExtend 
    .Delete Unit:=wdCharacter, Count:=1 
    .MoveRight Unit:=wdCharacter, Count:=1 
    .EndKey Unit:=wdStory 
    .MoveUp Unit:=wdParagraph, Count:=5, Extend:=wdExtend 
    .Delete Unit:=wdCharacter, Count:=1 
End With 

End Sub 

Luego agarra el resultado y escribirlo en alguna parte.

EDITAR: Esto es bastante horrible, acabo de grabar y alterar un poco.

0

Si no puede lograr que la codificación fragmentada y el encabezado de rango funcionen, sugiero que haga el lado del servidor de trabajo con un script CGI o lo que sea cómodo. ¡Parece un desperdicio recuperar todo el archivo simplemente para examinar toda la línea!

Si publicas qué sistema operativo y servidor web estás utilizando, estoy seguro de que alguien aquí te publicará una secuencia de comandos CGI en funcionamiento en cuestión de minutos si te quedas atascado.

Cuestiones relacionadas