使用 urllib 更改 URL 的主机名
Change hostname of URL with urllib
我想更改 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
是namedtuple,所以scheme可以换成:
>>> parsed_replaced = parsed._replace(scheme='http')
>>> urllib.parse.urlunparse(parsed_replaced)
'http://foo.bar.com:9300/hello'
parsed
对象还有一个主机名属性:
>>> parsed.hostname
'foo.bar.com'
但它不是namedtuple中的字段之一,所以不能像scheme那样替换。
有没有办法只替换 URL 中的主机名?
您正在寻找netloc
url = 'https://foo.bar.com:9300/hello'
parsed = urllib.parse.urlparse(url)
parsed_replaced = parsed._replace(netloc='spam.eggs.com:9300')
urllib.parse.urlunparse(parsed_replaced)
'https://spam.eggs.com:9300/hello'
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)
我想更改 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
是namedtuple,所以scheme可以换成:
>>> parsed_replaced = parsed._replace(scheme='http')
>>> urllib.parse.urlunparse(parsed_replaced)
'http://foo.bar.com:9300/hello'
parsed
对象还有一个主机名属性:
>>> parsed.hostname
'foo.bar.com'
但它不是namedtuple中的字段之一,所以不能像scheme那样替换。
有没有办法只替换 URL 中的主机名?
您正在寻找netloc
url = 'https://foo.bar.com:9300/hello'
parsed = urllib.parse.urlparse(url)
parsed_replaced = parsed._replace(netloc='spam.eggs.com:9300')
urllib.parse.urlunparse(parsed_replaced)
'https://spam.eggs.com:9300/hello'
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)