gpt4 book ai didi

python - 更改 url 中的主机名

转载 作者:IT老高 更新时间:2023-10-28 21:38:40 34 4
gpt4 key购买 nike

我正在尝试使用 python 来更改 url 中的主机名,并且一直在使用 urlparse 模块一段时间,但没有找到令人满意的解决方案。例如,考虑 url:

https://www.google.dk:80/barbaz

我想将“www.google.dk”替换为例如“www.foo.dk”,所以我得到以下网址:

https://www.foo.dk:80/barbaz .

所以我要替换的部分是 urlparse.urlsplit 所指的主机名。我曾希望 urlsplit 的结果能让我做出改变,但结果类型 ParseResult 不允许我这样做。如果没有别的,我当然可以通过将所有部分与 + 一起附加来重建新的 url,但这会给我留下一些非常丑陋的代码,其中包含很多条件来在正确的地方获得“://”和“:” .

最佳答案

您可以使用 urllib.parse.urlparse函数和 ParseResult._replace 方法(Python 3):

>>> import urllib.parse
>>> parsed = urllib.parse.urlparse("https://www.google.dk:80/barbaz")
>>> replaced = parsed._replace(netloc="www.foo.dk:80")
>>> print(replaced)
ParseResult(scheme='https', netloc='www.foo.dk:80', path='/barbaz', params='', query='', fragment='')

如果您使用的是 Python 2,请将 urllib.parse 替换为 urlparse

ParseResultnamedtuple 的子类和 _replace是一个 namedtuple 方法:

returns a new instance of the named tuple replacing specified fields with new values

更新:

正如@2rs2ts 在评论中所说,netloc 属性包括一个端口号。

好消息:ParseResult 具有 hostnameport 属性。坏消息:hostnameport 不是 namedtuple 的成员,它们是动态属性,您不能进行 parsed。 _replace(hostname="www.foo.dk")。它会抛出异常。

如果您不想拆分 : 并且您的 url 总是有一个端口号并且没有 usernamepassword (就像“https://username:password@www.google.dk:80/barbaz ”这样的网址)你可以这样做:

parsed._replace(netloc="{}:{}".format(parsed.hostname, parsed.port))

关于python - 更改 url 中的主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21628852/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com