20

我刚刚抓取了一堆 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

就是这样!

4

5 回答 5

17

获取缩短 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/'

就是这样!

于 2010-03-16T12:37:17.503 回答
3

(AFAIK)大多数 url 缩短器会跟踪已经缩短的 url,因此对具有相同 URL 的同一引擎的多个请求将返回相同的短代码。

正如已经建议的那样,提取真实 URL 的最佳方法是从对缩短 URL 的请求的响应中读取标头。但是,一些缩短服务(例如 bit.ly)提供API 方法来返回长 url

于 2010-03-16T12:19:17.947 回答
1
  1. 列出最常用的 URL 缩短器列表,并在发现新的 URL 缩短器时将其展开,然后检查列表中一项的链接。

  2. 除非您跟随它,否则您不知道 URL 指向的位置,因此最好的方法应该是跟随缩短的 url 并提取响应的 http 标头以查看其指向的位置。

我猜每秒 100 个请求你肯定会遇到麻烦(我猜可能发生的最糟糕的情况是他们将你的 IP 列为垃圾邮件发送者)。

于 2010-03-16T12:15:59.523 回答
1

发布的解决方案仅适用于 Python 2.x,对于 Python 3.x,您可以这样做

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

获取完整的 URL。

于 2016-07-08T04:24:55.863 回答
0

根据我的阅读,这些答案解决了第二个问题。我对第一个问题很感兴趣。在查看了大约 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

于 2014-05-08T17:52:36.407 回答