Определить назначение сокращенного или "крошечного" 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
Что это!
Ответы
Ответ 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