【问题标题】:Find tiny url final redirected url找到微小的 url 最终重定向的 url
【发布时间】:2016-05-06 19:12:48
【问题描述】:

我在 SO 中关注了其他几个问题以找到最终的重定向 url,但是对于以下 url,我无法使重定向工作。它不会重定向并停留在 tinyurl。

import urllib2
def getFinalUrl(start_url):
        var = urllib2.urlopen(start_url)
        final_url = var.geturl()
        return final_url


url = "http://redirect.tinyurl.com/api/click?key=a7e37b5f6ff1de9cb410158b1013e54a&out=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fprofile%2FA3B4EO22KUPKYW&loc=&cuid=0072ce987ebb47328d22e465a051ce7&opt=false&format=txt"
redirect = getFinalUrl(url)
print "redirect: " + redirect

结果(如果您在浏览器中尝试,这不是最终的 url):

redirect: http://redirect.tinyurl.com/api/click?key=a7e37b5f6ff1de9cb410158b1013e54a&out=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fprofile%2FA3B4EO22KUPKYW&loc=&cuid=0072ce987ebb47328d22e465a051ce7&opt=false&format=txt

【问题讨论】:

  • 你的 url 已经有目标 url....
  • 您需要 javascript 来重定向,打印返回的 html,您会看到我们无法自动重定向您,因为 JavaScript 不可用。
  • @taesu 如果你在浏览器中尝试它会被重定向。
  • 我的意思是你不必向 tinyurl.com 发送 get 请求,因为你的 URL 中已经有了目标 URL
  • @apadana,是的,你需要像 selenium 这样的东西。

标签: python redirect tinyurl


【解决方案1】:
import urlparse
url = 'http://redirect.tinyurl.com/api/click?key=a7e37b5f6ff1de9cb410158b1013e54a&out=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fprofile%2FA3B4EO22KUPKYW&loc=&cuid=0072ce987ebb47328d22e465a051ce7&opt=false&format=txt'
try:
    out = urlparse.parse_qs(urlparse.urlparse(url).query)['out'][0]
    print(out) #http://www.amazon.com/gp/profile/A3B4EO22KUPKYW
except Exception as e: # dont catch all
    print('not found')

这种 url 不需要卷曲来找出目标/重定向 url 是什么,好吧,因为你的 url 中已经有了它们。


如果没有像这个人那样显示目标/重定向 url

tinyurl.com/xxxx

那么这是一个不同的故事,你必须卷曲它以找出它解析的内容/304 如下所示:

import requests
url = 'http://urlshortener.com/applebanana'
t = requests.get(url)
print(t.url)

【讨论】:

  • 感谢您的回答。它适用于这种特定情况,但是我有大量的重定向 url,我不知道它是否会变得很小,所以我正在寻找一个更通用的解决方案,这样我就不需要解析网址。无论如何感谢您的回答。现在我可以添加一个 if 条件来解析并以这种方式找到这个 url。感谢您的回答!
  • 当您的输入不一致时,没有通用的解决问题的方法。它必须检测 url 模式,并使用适用的函数来解决。
  • 如果我使用带有 selenium 的浏览器,我可以始终如一地找到网址。问题在于无法重定向的 urllib2。不知何故,它检测到我的请求不是来自浏览器,并在响应中给出了一个 html 错误页面。
  • 不是urllib2不能重定向,urllib2只会发送一个GET请求。如果你查看你的URL,那么你会看到重定向是由js执行的,而不是 304 header。这就是你不能使用urllib2 的原因。如果您想使用seleniumpanthamjs,那么在完成如此简单的任务方面的资源成本会更高。
猜你喜欢
  • 1970-01-01
  • 2019-12-16
  • 2021-09-15
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2020-03-22
  • 2014-12-07
  • 1970-01-01
相关资源
最近更新 更多