Определить назначение укороченного или крошечного URL-адреса

Я только что собрал кучу данных из Живой ленты Google и хочу знать, какие сообщения Живой ленты ссылаются на одни и те же новостные статьи. Проблема в том, что многие ссылки в этих сообщениях были изменены сокращателями URL-адресов, поэтому может случиться так, что многие различные сокращенные URL-адреса на самом деле все указывают на одну и ту же новостную статью.

Учитывая, что у меня миллионы постов, какой самый эффективный способ (желательно на питоне) для меня

  1. определить, является ли URL-адрес сокращенным URL-адресом (из любого из многих сервисов сокращения URL-адресов или, по крайней мере, самого большого)
  2. Найдите «назначение» сокращенного URL-адреса, то есть длинную исходную версию сокращенного URL-адреса.

Кто-нибудь знает, налагают ли сокращатели URL-адресов строгие ограничения на скорость запросов? Если я уменьшу это значение до 100 в секунду (все приходящие с одного и того же IP-адреса), как вы думаете, у меня возникнут проблемы?

ОБНОВЛЕНИЕ И ПРЕДВАРИТЕЛЬНОЕ РЕШЕНИЕ Ответы привели к следующему простому решению

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

Вот и все!


person conradlee    schedule 16.03.2010    source источник


Ответы (5)


Самый простой способ получить назначение сокращенного URL-адреса — использовать urllib. Учитывая, что короткий URL-адрес действителен (код ответа 200), URL-адрес будет возвращен вам.

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

И это все!

person jathanism    schedule 16.03.2010

(AFAIK) Большинство сокращателей URL-адресов отслеживают уже сокращенные URL-адреса, поэтому несколько запросов к одному и тому же движку с одним и тем же URL-адресом вернут один и тот же короткий код.

Как было предложено, лучший способ извлечь реальный URL-адрес — прочитать заголовки из ответа на запрос сокращенного URL-адреса. Однако некоторые службы сокращения (например, bit.ly) предоставляют метод API. чтобы вернуть длинный URL

person ZombieSheep    schedule 16.03.2010

  1. Составьте список наиболее часто используемых сокращателей URL-адресов и расширяйте его, пока вы открываете новые, а затем проверяйте ссылку на один элемент списка.

  2. Вы не знаете, куда указывает URL-адрес, если не будете следовать ему, поэтому лучший способ сделать это — следовать сокращенному URL-адресу и извлечь заголовок http ответа, чтобы увидеть, куда он направляется.

Я думаю, что со 100 запросами в секунду у вас наверняка могут возникнуть проблемы (мне кажется, худшее, что может случиться, это то, что они заносят ваш IP в черный список как спамер).

person OverLex    schedule 16.03.2010
comment
Знаете ли вы, какую библиотеку и команду Python я мог бы использовать для наиболее эффективного обнаружения целевого URL-адреса? Например, import urllib2 response = urllib2.urlopen(bit.ly/AoifeMcL_ID3) headers = response.headers.headers In в этом случае заголовки содержат доменное имя целевого URL-адреса, но я не вижу полный URL-адрес... где мне нужно искать в ответе целевой URL-адрес? - person conradlee; 16.03.2010

Опубликованное решение работает только для Python 2.x, для Python 3.x вы можете сделать это

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

чтобы получить полный URL.

person Carlo    schedule 08.07.2016

Из того, что я прочитал, эти ответы касались второго вопроса. Меня заинтересовал первый вопрос. После просмотра списка примерно из 300 сокращений кажется, что лучший способ обнаружить их — просто поместить их в список или регулярное выражение и найти совпадение с любым из них.

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

Затем используйте r1 для сопоставления в качестве регулярного выражения с тем, что вы пытаетесь найти в сокращателях URL (почта и т. Д.).

Очень хороший список находится здесь: longurl.org/services.

person Paul    schedule 08.05.2014