Cómo leer html de una URL en Python 3

Miré las preguntas similares anteriores y me confundí más.

En Python 3.4, quiero leer una página html como una cadena, dada la url.

En Perl hago esto con LWP :: Simple, usando get ().

Un ejemplo de matplotlib 1.3.1 dice: import urllib; u1=urllib.urlretrieve(url) import urllib; u1=urllib.urlretrieve(url) . python3 no puede encontrar urlretrieve .

Intenté u1 = urllib.request.urlopen(url) , que parece obtener un objeto HTTPResponse , pero no puedo imprimirlo ni obtener una longitud ni indexarlo.

u1.body no existe. No puedo encontrar una descripción de HTTPResponse en python3.

¿Hay un atributo en el objeto HTTPResponse que me dará los bytes en bruto de la página html?

(Las cosas irrelevantes de otras preguntas incluyen urllib2 , que no existe en Python, csv parsers, etc.)

Editar:

Encontré algo en una pregunta anterior que parcialmente (en su mayoría) hace el trabajo:

 u2 = urllib.request.urlopen('http://finance.yahoo.com/q?s=aapl&ql=1') for lines in u2.readlines(): print (lines) 

Digo ‘parcialmente’ porque no quiero leer líneas separadas, sino solo una cadena grande.

Simplemente podría concatenar las líneas, pero cada línea impresa tiene un carácter ‘b’ precedido.

De donde viene eso?

Una vez más, supongo que podría eliminar el primer carácter antes de concatenar, pero eso puede llegar a ser un kloodge.

Tenga en cuenta que Python3 no lee el código html como una cadena sino como un bytearray , por lo que necesita convertirlo en uno con decode .

 import urllib.request fp = urllib.request.urlopen("http://www.python.org") mybytes = fp.read() mystr = mybytes.decode("utf8") fp.close() print(mystr) 

Prueba el módulo de ‘solicitudes’, es mucho más simple.

 #pip install requests for installation import requests url = 'https://www.google.com/' r = requests.get(url) r.text 

más información aquí> http://docs.python-requests.org/en/master/

urllib.request.urlopen(url).read() debería devolverle la página HTML en bruto como una cadena.

 import requests url = requests.get("http://yahoo.com") htmltext = url.text print(htmltext) 

Esto funcionará similar a urllib.urlopen .

Leer una página html con urllib es bastante simple de hacer. Como quieres leerlo como una sola cadena te mostraré.

Importar urllib.request:

 #!/usr/bin/python3.5 import urllib.request 

Preparar nuestra solicitud

 request = urllib.request.Request('http://www.w3schools.com') 

Siempre use “probar / exceptuar” cuando solicite una página web ya que las cosas pueden salir mal fácilmente. urlopen () solicita la página.

 try: response = urllib.request.urlopen(request) except: print("something wrong") 

Type es una gran función que nos dirá qué tipo de variable es ‘type’. Aquí, la respuesta es un objeto http.response.

 print(type(response)) 

La función de lectura para nuestro objeto de respuesta almacenará el html como bytes en nuestra variable. De nuevo, tipo () lo verificará.

 htmlBytes = response.read() print(type(htmlBytes)) 

Ahora usamos la función de deencoding para nuestra variable de bytes para obtener una sola cadena.

 htmlStr = htmlBytes.decode("utf8") print(type(htmlStr)) 

Si desea dividir esta cadena en líneas separadas, puede hacerlo con la función split (). De esta forma, podemos iterar fácilmente para imprimir toda la página o realizar cualquier otro procesamiento.

 htmlSplit = htmlStr.split('\n') print(type(htmlSplit)) for line in htmlSplit: print(line) 

Esperemos que esto proporcione un poco más de una respuesta detallada. La documentación y los tutoriales de Python son excelentes, lo usaría como referencia porque responderá a la mayoría de las preguntas que pueda tener.

 import urllib some_url = 'https://docs.python.org/2/library/urllib.html' filehandle = urllib.urlopen(some_url) print filehandle.read()