2010-03-16 15 views
17

Acabo de recopilar un montón de datos de Google Buzz, y quiero saber qué publicaciones de Buzz hacen referencia a las mismas noticias. El problema es que muchos de los enlaces en estas publicaciones han sido modificados por acortadores de URL, por lo que podría darse el caso de que muchas URL recortadas distintas apuntaran al mismo artículo de noticias.Detectar el destino de la url acortada o "minúscula"

Dado que tengo millones de mensajes, lo que es la forma más eficaz (preferiblemente en Python) para mí

  1. detectar si un URL es una URL acortada (de cualquiera de los muchos servicios de acortamiento de URL, o al menos la más grande)
  2. Encuentra el "destino" de la url acortada, es decir, la versión larga y original de la URL acortada.

¿Alguien sabe si los acortadores de URL imponen estrictos límites de velocidad de solicitud? Si mantengo esto en 100/segundo (todo viene de la misma dirección IP), ¿crees que me encontraré en problemas?

ACTUALIZACIÓN & primera solución Las respuestas han dado lugar a la siguiente solución simple

import urllib2 
response = urllib2.urlopen("http://bit.ly/AoifeMcL_ID3") # Some shortened url 
url_destination = response.url 

Eso es todo!

Respuesta

15

La forma más fácil de obtener el destino de una URL acortada es con urllib. Dado que la URL corta es válida (código de respuesta 200), se le devolverá la URL.

>>> import urllib 
>>> resp = urllib.urlopen('http://bit.ly/bcFOko') 
>>> resp.getcode() 
200 
>>> resp.url 
'http://mrdoob.com/lab/javascript/harmony/' 

¡Y eso es todo!

1
  1. Haz una lista de la URL-acortadores más usado y expandirlo mientras descubre otros nuevos, a continuación, echa un enlace para un artículo de la lista.

  2. No sabe a dónde apunta la URL a menos que la siga, por lo que la mejor manera de hacerlo debería ser seguir la url acortada y extraer el encabezado http de la respuesta para ver hacia dónde se dirige.

supongo que con 100 peticiones por segundo que seguramente podría ir en problemas (I guestt lo peor que puede pasar es que la lista negra de la propiedad intelectual como un spammer).

+0

¿Sabes qué biblioteca y comando python podría usar para descubrir de manera más eficiente la URL de destino? Por ejemplo importación urllib2 respuesta = urllib2.urlopen ("http://bit.ly/AoifeMcL_ID3") cabeceras = response.headers.headers En este caso, los encabezados contienen el nombre de dominio de la URL de destino, pero No veo la URL completa ... ¿dónde debo buscar la respuesta para la URL de destino? – conradlee

3

(AFAIK) La mayoría de los acortadores de url llevan un registro de las URL ya acortadas, por lo que varias solicitudes al mismo motor con la misma URL devolverán el mismo código abreviado.

Como se ha sugerido, la mejor forma de extraer la URL real es leer los encabezados de una respuesta a una solicitud de la URL acortada. Sin embargo, algunos servicios de acortamiento (por ejemplo, bit.ly) proporcionan an API method para devolver la url larga

0

Por lo que he leído, estas respuestas se dirigieron a la segunda pregunta. Estaba interesado en la primera pregunta. Después de ver una lista de aproximadamente 300 acortadores, parece que la mejor manera de detectarlos es simplemente ponerlos en una lista o expresiones regulares y buscar coincidencias con cualquiera de ellos.

"|".join(z1) 
'0rz.tw|1link.in|1url.com|2.gp|2big.at  
r1 = re.compile("|".join(z1),flags=ic) 

Luego, utilizando r1 como para que coincida con una expresión regular contra lo que usted está tratando de encontrar la acortadores de URL en (correo, etc ...)

Una muy buena lista está aquí: longurl.org/services

1

La solución publicado sólo funcionan para Python 2.x, 3.x para Python se puede hacer esto

import urllib.request as urlreq 
link = urlreq.urlopen("http://www.google.com") 
fullURL = link.url 

llegar la URL completa

Cuestiones relacionadas