Подтвердить что ты не робот

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

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

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

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

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

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

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

Что это!

4b9b3361

Ответ 1

Самый простой способ получить назначение сокращенного 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/'

И что это!

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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