python如何获得一个url地址对应的跳转后的最终网址

在python中,如何获取短链对应最终网址,现在有很多淘宝短链,我需要获取短链跳到的最终网址,这个有什么好办法吗?有的是302 有的是直接在网页用js进行跳转,,这些如何获取

阅读 18.7k
3 个回答

用selenium+phantonjs...

http://stackoverflow.com/ques...

#!/usr/bin/python2.7

from twisted.internet import reactor
from twisted.internet.defer import Deferred, DeferredList, DeferredLock
from twisted.internet.defer import inlineCallbacks
from twisted.web.client import Agent, HTTPConnectionPool
from twisted.web.http_headers import Headers
from pprint import pprint
from collections import defaultdict
from urlparse import urlparse
from random import randrange
import fileinput

pool = HTTPConnectionPool(reactor)
pool.maxPersistentPerHost = 16
agent = Agent(reactor, pool)
locks = defaultdict(DeferredLock)
locations = {}

def getLock(url, simultaneous = 1):
    return locks[urlparse(url).netloc, randrange(simultaneous)]

@inlineCallbacks
def getMapping(url):
    # Limit ourselves to 4 simultaneous connections per host
    # Tweak this as desired, but make sure that it no larger than
    # pool.maxPersistentPerHost
    lock = getLock(url,4)
    yield lock.acquire()
    try:
        resp = yield agent.request('HEAD', url)
        locations[url] = resp.headers.getRawHeaders('location',[None])[0]
    except Exception as e:
        locations[url] = str(e)
    finally:
       lock.release()
       
       
       

而且可以试试pip包

https://pypi.python.org/pypi/...

from urlunshort import resolve
resolve("http://bit.ly/qlKaI")   结果  'http://bitbucket.org/runeh/urlunshort/'   

    
新手上路,请多包涵

python 3.6 的话,就简单多了
import requests
r = requests.get('http://xxx')
print(r.url)

可以试试轻量级mechanize库,但不支持JS类的重定向

pip install mechanize
# _*_ coding:utf-8 _*_
import mechanize
br = mechanize.Browser()
br.set_handle_equiv(True)  # 设置是否处理HTML http-equiv标头
br.set_handle_redirect(True)  # 设置是否处理重定向
br.set_handle_referer(True)  # 设置是否向每个请求添加referer头
br.set_handle_robots(False)  # 设置是不遵守robots中的规则
br.set_handle_gzip(False)  # 处理giz传输编码
br.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')]
source_url = ""
response=br.open(source_url)
target_url=response.geturl()
print("source_url=" + source_url)
print("target_url=" + target_url)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题