我刚刚抓了一堆Google Buzz数据,我想知道哪些Buzz帖子引用了相同的新闻文章。问题是这些帖子中的许多链接都被URL缩短器修改过,因此许多不同的缩短URL实际上都指向相同的新闻文章。
鉴于我有数百万篇帖子,对我来说最有效的方法是什么(最好是在python中)
有没有人知道网址缩短程序是否会施加严格的请求率限制?如果我把它保持在100 /秒(所有来自相同的IP地址),你认为我会遇到麻烦吗?
更新&初步解决方案 这些回应导致了以下简单的解决方案
import urllib2
response = urllib2.urlopen("http://bit.ly/AoifeMcL_ID3") # Some shortened url
url_destination = response.url
就是这样!
答案 0 :(得分:15)
获取缩短网址目标的最简单方法是使用urllib
。鉴于短URL有效(响应代码200),URL将返回给您。
>>> import urllib
>>> resp = urllib.urlopen('http://bit.ly/bcFOko')
>>> resp.getcode()
200
>>> resp.url
'http://mrdoob.com/lab/javascript/harmony/'
就是这样!
答案 1 :(得分:3)
(AFAIK)大多数网址缩短程序会跟踪已缩短的网址,因此对具有相同网址的同一引擎的多次请求将返回相同的短代码。
正如所建议的那样,提取真实网址的最佳方法是从对缩短网址请求的响应中读取标头。但是,一些缩短服务(例如bit.ly)提供an API method来返回长URL
答案 2 :(得分:1)
列出最常用的网址缩短程序并在发现新网址时展开它,然后检查列表中某个项目的链接。
您不知道URL指向的位置,除非您遵循它,因此最好的方法是遵循缩短的URL并提取响应的http标头以查看其前往的位置。
我想每秒有100个请求你肯定会遇到麻烦(我最糟糕的情况是,他们将你的IP列为黑名单)。
答案 3 :(得分:1)
发布的解决方案仅适用于Python 2.x,对于Python 3.x,您可以执行此操作
import urllib.request as urlreq link = urlreq.urlopen("http://www.google.com") fullURL = link.url
获取完整的网址。
答案 4 :(得分:0)
根据我的阅读,这些答案解决了第二个问题。我对第一个问题感兴趣。在查看大约300个缩短器的列表之后,检测它们的最佳方法似乎是将它们放入列表或正则表达式中并查找与它们中的任何一个匹配。
"|".join(z1)
'0rz.tw|1link.in|1url.com|2.gp|2big.at
r1 = re.compile("|".join(z1),flags=ic)
然后使用r1作为正则表达式匹配任何你想要找到的网址缩写器(邮件等等)
这里有一个非常好的清单:longurl.org/services