首页 > 解决方案 > 使用 urllib 更改 URL 的主机名

问题描述

我想更改 URL 的主机名。

>>> import urllib


>>> url = "https://foo.bar.com:9300/hello"

>>> parsed = urllib.parse.urlparse(url)

>>> parsed
ParseResult(scheme='https', netloc='foo.bar.com:9300', path='/hello', params='', query='', fragment='')

因为parsed是一个命名元组,所以可以替换方案:

>>> parsed_replaced = parsed._replace(scheme='http')

>>> urllib.parse.urlunparse(parsed_replaced)
'http://foo.bar.com:9300/hello'

parsed对象还具有主机名属性:

>>> parsed.hostname
'foo.bar.com'

但它不是namedtuple中的字段之一,所以不能像方案那样替换。

有没有办法只替换 URL 中的主机名?

标签: pythonpython-3.xurlurlliburlparse

解决方案


import urllib.parse

url = "https://foo.bar.com:9300/hello"
parsed = urllib.parse.urlparse(url)
hostname = parsed.hostname
new_hostname = "my.new.hostname"

parsed_replaced = parsed._replace(netloc=parsed.netloc.replace(hostname, new_hostname))

print(parsed_replaced)

推荐阅读