python - gdscript - Detectar destino de url acortado o "minúsculo"
gdscript pdf (5)
Acabo de robar un montón de datos de Google Buzz, y quiero saber qué publicaciones de Buzz hacen referencia a los mismos artículos de 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.
Dado que tengo millones de mensajes, ¿cuál es la forma más eficiente (preferiblemente en python) para mí?
- detectar si una URL es una URL acortada (de cualquiera de los muchos servicios de reducción de URL, o al menos la más grande)
- Encuentre 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 límites de frecuencia de solicitud estrictos? Si mantengo esto en 100 / segundo (todo viene de la misma dirección IP), ¿crees que me encontraré en problemas?
ACTUALIZACIÓN Y SOLUCIÓN PRELIMINAR Las respuestas han llevado 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!
Haga una lista de los acortadores de URL más utilizados y amplíelos mientras descubre nuevos, luego verifique un enlace para un elemento de la lista.
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 solicitudes por segundo seguramente podría meterse en problemas (lo que peor me puede pasar es que incluyan en la lista negra su IP como spammer).
(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 un método API para devolver la URL larga.
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 eso!
Según lo que he leído, estas respuestas abordaron 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, use r1 para que coincida como una expresión regular en contra de lo que esté tratando de encontrar en los acortadores de url (correo, etc.)
Una muy buena lista está aquí: longurl.org/services
La solución publicada solo funciona para Python 2.x, para Python 3.x puede hacer esto
import urllib.request as urlreq link = urlreq.urlopen("http://www.google.com") fullURL = link.url
para obtener la URL completa