我只是刮了一堆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

而已!

有帮助吗?

解决方案

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

就是这样!

其他提示

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

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

  1. 在发现新的列表时,请列出最常用的URL缩短器,并在发现新列表时进行扩展,然后检查列表中一项的链接。

  2. 您不知道URL指向在哪里,除非您遵循它,那么这样做的最佳方法应该是遵循缩短的URL并提取响应的HTTP标头以查看其前往位置。

我猜想每秒100个请求,您肯定会遇到麻烦(我来看最糟糕的情况是它们作为垃圾邮件发送者将您的IP黑名单列为黑名单)。

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

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

获取完整的URL。

从我阅读的内容来看,这些答案解决了第二个问题。我对第一个问题感兴趣。在查看了大约300个缩短器的列表之后,检测到它们的最佳方法是简单地将它们放入列表或Regex并与任何一个匹配。

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

然后,使用R1将其作为正则匹配与您试图在(邮件等...)中找到URL缩短器的任何内容匹配()

一个很好的清单在这里: longurl.org/services

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top