自动创建有效链接

1 投票
3 回答
571 浏览
提问于 2025-04-16 09:21

我刚开始学Python,所以请多多包涵 :)

我想知道Python有没有什么内置的方法,可以把变量加到URL里,不管这个URL是什么样子的。

我希望能把一个URL变量(test=1)加到一个可能有以下几种结构的URL中:

http://www.aaa.com (可以简单地在后面加上 "/?test=1")

http://www.aaa.com/home (和上面一样,也可以简单地在后面加上 "/?test=1")

http://www.aaa.com/?location=home (会发现已经有一个 ? 了,所以会在后面加上 &test=1)

http://www.aaa.com/?location=home&page=1 (和上面一样,也会发现已经有一个 ? 了,所以会在后面加上 &test=1)

我很乐意自己写个代码来实现这个功能,但如果Python已经有现成的方法可以做到这一点,那我当然更愿意用这些内置的功能来节省时间 ;-)

提前谢谢你们!

3 个回答

1

是的,urlparse这个库(在Python 3中叫做urllib.parse)可以帮助你完成这个任务:

http://docs.python.org/library/urlparse.html

特别是urlparse和urlunparse这两个方法。

1

你可能想要的是类似于 urllib.urlencode 的东西:http://docs.python.org/library/urllib.html#urllib.urlencode

3

结合了 Lennart RegebroAdam Vendenberg 的建议,你可以这样做:

import urllib
import urlparse

query=urllib.urlencode({"test":1})
urls=['http://www.aaa.com',
      'http://www.aaa.com/home',
      'http://www.aaa.com/?location=home',
      'http://www.aaa.com/?location=home&page=1']
for url in urls:
    x=urlparse.urlparse(url)
    new_query=(x.query+'&'+query) if x.query else query
    y=urlparse.urlunparse((x.scheme,x.netloc,x.path,x.params,new_query,x.fragment))
    print(y)

这样会得到

http://www.aaa.com?test=1
http://www.aaa.com/home?test=1
http://www.aaa.com/?location=home&test=1
http://www.aaa.com/?location=home&page=1&test=1

撰写回答