Определить назначение сокращенного или «крошечного» URL - PullRequest
17 голосов
/ 16 марта 2010

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

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

  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

Вот и все!

Ответы [ 5 ]

16 голосов
/ 16 марта 2010

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

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

И это все!

3 голосов
/ 16 марта 2010

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

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

1 голос
/ 08 июля 2016

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

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

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

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

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

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

0 голосов
/ 08 мая 2014

Из того, что я прочитал, эти ответы касались второго вопроса. Меня интересовал первый вопрос. После просмотра списка из примерно 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...