Python R2


Navegando con Python (urllib2)

Posted in Python por Arturo Elias Antón en 4 septiembre 2008
Tags: , , , , , , , ,

Modulo para lectura de URLs

Python nos facilita el módulo urllib2 para la interacción con URLs, tambien existe urllib. Pero aunque su uso  es muy parecido, es menos completa que urllib2.
El modulo urllib2 puede leer datos de una URL usando varios protocolos como HTTP, HTTPS, FTP, o Gopher.

Obtener una Web

Para obtener un streem con el contenido de una página Web solicitaremos a la función urlopen del cualquiera de los módulos ya mencionados. Luego este stream podrá ser leído por medio de los métodos read, readline. Y también podrá ser cerrado por medio del método close.

El ejemplo más simple es el que veremos aquí:

#!/usr/bin/python
# Nombre de Fichero: urllib2_1.py

import urllib2
response = urllib2.urlopen('http://www.yahoo.com.ar/')
html = response.read()

HTTP se basa en pedidos y respuestas. El cliente hace una solicitud al servidor y el servidor responde. El modulo urllib2 nos permite crear nuestra petición que representa la petición HTTP que están haciendo. En su forma más simple de crear una Solicitud de objeto que especifica la URL que desea buscar. Luego llama a urlopen con esta solicitud objeto como parámetro y urlopen nos devuelve una respuesta objeto de la URL solicitada:

El ejemplo se puede ver aca:

#!/usr/bin/python
# Nombre de Fichero: urllib2.py

import urllib2
import sys

web=raw_input("Web es http://")
userAgent = 'NuestroNavegador'
headers = { 'User-Agent' : userAgent }
req = urllib2.Request("http://"+web , None, headers)
response = urllib2.urlopen(req)
print response.read()
response.close()

También podremos necesitar que nuestro cliente Web se valida ante un proxy, esto es muy común cuando nuestro script corre dentro de una empresa.

La modificación de urllib2.py se valida ante un proxy seria proxy.py

#!/usr/bin/python
# Nombre de Fichero: proxy.py

import urllib2
import getpass
import sys

proxyuser=raw_input("Ingrese usuario:")
proxypass= getpass.getpass("Enter proxy password:")
httpproxy=raw_input("Ingrese la direccion del proxy:")
proxy=urllib2.ProxyHandler({"http":'http://'+proxyuser+':'+proxypass+'@'+httpproxy})
authinfo=urllib2.HTTPBasicAuthHandler()
opener=urllib2.build_opener(proxy, authinfo,urllib2.HTTPHandler)
urllib2.install_opener(opener)

web=raw_input("Web es http://")
userAgent = 'NuestroNavegador'
headers = { 'User-Agent' : userAgent }
req = urllib2.Request("http://"+web , None, headers)
response = urllib2.urlopen(req)
print response.read()
response.close()

HTTPError y URLError

Dos errores que tenemos que tener en cuenta cuando manejamos urllib2 son:

  • URLError: son errores que lanza la librería.
  • HTTPError: es el error que nos envía el servidor como el conocido 404 cuando no encuentra la pagina

También nos podemos encontrar con errores lanzados por módulos que utiliza urllib2 como httplib o el propio módulo e socket

Anuncios

4 comentarios to 'Navegando con Python (urllib2)'

Subscribe to comments with RSS o TrackBack to 'Navegando con Python (urllib2)'.

  1. grimbilo said,

    sabrias decirme como hacer para que coja el generado, es decir, si tiene javascript con este metodo de urllib lo que conseguiras es todo el codigo fuente original, y yo lo que quiero es conseguir el codigo generado (lo que se ve en el browser). un ejemplo: http://www.mediafire.com/download.php?fazwitxwtgn
    no se ve en el codigo fuente el link de descarga hasta que no se ejecuta el javascript. bueno si sabes de otra manera conseguir el link de descarga.

  2. karen said,

    hola tengo n problem quiero mandar un correro mediante python, pero el proxy, es el problema, que solucion me propones ya qeu el proxy no lo van asuspender, ni crear un acceso directo

  3. carlos cuesta said,

    hola me gustaria saber si puede obtener las paginas que visita una ip mediante urllib2

  4. Agustin said,

    Muchísimas Gracias por el ejemplo!


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: