2011-04-04 21 views
6

Hice un pequeño analizador usando HTMLparser y me gustaría saber dónde se redirige un enlace. No sé cómo explicar esto, así que vea este ejemplo:Determinación de la URL redirigida en Python

En mi página tengo un enlace a la fuente: http://www.myweb.com?out=147, que redirige a http://www.mylink.com. Puedo analizar http://www.myweb.com?out=147 sin ningún problema, pero no sé cómo obtener http://www.mylink.com.

Respuesta

3

No se puede obtener la URL de redirección mediante el análisis del código fuente HTML. Las redirecciones son activadas por el servidor y NO por el cliente. Debe realizar una solicitud HTTP a la URL relacionada y verificar la respuesta HTTP del servidor, en particular para el código de estado HTTP 304 (Redirección) y la nueva URL.

11

Puedes usar urllib2 (urllib.request en Python 3) y su HTTPRedirectHandler para averiguar dónde te redirigirá una URL. He aquí una función que hace que:

import urllib2 

def get_redirected_url(url): 
    opener = urllib2.build_opener(urllib2.HTTPRedirectHandler) 
    request = opener.open(url) 
    return request.url 

print get_redirected_url("http://google.com/") 
# prints "http://www.google.com/" 
+3

Una ligera Gotcha con esto es que si un redireccionamiento redirige a otra redirección, sólo obtendrá la última redirección. Por ejemplo, supongamos que tiene un enlace t.co (abreviador de URL de Twitter), que en realidad se refiere a un enlace bit.ly, que hace referencia a un sitio web real, y luego obtendrá el sitio web "real" en lugar del bit.ly enlazar. Esto puede o no ser lo que uno quiere. –

+3

Y en caso de que alguien más busque la respuesta que vea esta pregunta, la biblioteca de Solicitudes (http://docs.python-requests.org/en/latest/index.html) hace esto no solo posible sino también trivial. –

Cuestiones relacionadas