2012-06-06 20 views
6

Estoy tratando de leer una página web completa y asignarla a una variable, pero tengo problemas para hacerlo. La variable parece que solo puede contener las primeras 512 o más líneas del origen de la página.Cómo leer una página web completa en una variable

Intenté usar readlines() para simplemente imprimir todas las líneas de la fuente en la pantalla, y eso me dio la fuente en su totalidad, pero necesito poder analizarlo con expresiones regulares, así que debo almacenarlo en una variable de alguna manera. ¿Ayuda?

data = urllib2.urlopen(url) 
print data 

Solo me da aproximadamente 1/3 de la fuente.

data = urllib2.urlopen(url) 
for lines in data.readlines() 
     print lines 

Esto me da toda la fuente.

Como dije, necesito poder analizar el hilo con expresiones regulares, pero la parte que necesito no está en el primer 1/3 que puedo almacenar en mi variable.

+2

posible duplicado de [Descargar página html y su contenido] (http://stackoverflow.com/questions/1825438/download-html-page-and-its-content) –

Respuesta

4

Debería poder usar file.read() para leer todo el archivo en una cadena. Eso te dará la fuente completa. Algo así como

data = urllib2.urlopen(url) 
print data.read() 

debería darle toda la página web.

A partir de ahí, no analice HTML con regex (publicación desgastada en este sentido here), pero utilice un analizador de HTML dedicado en su lugar. Alternativamente, limpie el HTML y conviértalo en XHTML (por ejemplo, con HTML Tidy) y luego use una biblioteca de análisis XML como el estándar ElementTree. Qué enfoque es mejor depende de su aplicación.

+0

Esto no me da más de la página web que mi primer ejemplo. – Rentafence

0

También recomendaría usar bibliotecas de análisis web de código abierto para facilitar el trabajo en lugar de usar expresiones regulares para el análisis completo de HTML, de cualquier forma que necesite regex para el análisis de url.

0

En realidad, print data no debería darle ningún contenido html porque es solo un puntero de archivo. La documentación oficial https://docs.python.org/2/library/urllib2.html:

Esta función devuelve un objeto de tipo fichero

Esto es lo que tengo:

print data 
<addinfourl at 140131449328200 whose fp = <socket._fileobject object at 0x7f72e547fc50>> 

readlines() devuelve la lista de líneas de código html y se puede almacenar en una cadena como:

import urllib2 
data = urllib2.urlopen(url) 
l = [] 
s = '' 
for line in data.readlines(): 
    l.append(line) 
s = '\n'.join(l) 

Puede usar la lista l o la cadena s, de acuerdo con su necesidad.

Cuestiones relacionadas