You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用简单URL时urlparse解析失败,无法正确识别主机名

为什么urlparse解析"google.com/foo?bar=8"时hostname返回None?

这是个很常见的小坑——urlparse 要求传入的URL必须包含协议头(比如 http:// 或 https://)才能正确识别主机名。

当你只传 "google.com/foo?bar=8" 这种不带协议的字符串时,urlparse 会把整个内容判定为URL的path部分,而不是把google.com识别成主机名,所以hostname自然就返回None了。

看你原来的代码运行结果就能明白:

from urllib.parse import urlparse
parsed = urlparse("google.com/foo?bar=8")
print(parsed.hostname)  # 输出: None
print(parsed.path)      # 输出: google.com/foo (整个内容被当成路径了)

解决办法

给URL补上协议头就可以正常解析了:

from urllib.parse import urlparse
parsed = urlparse("http://google.com/foo?bar=8")
print(parsed.hostname)  # 输出: google.com

如果你的场景里经常会遇到不带协议的URL,也可以封装一个小函数自动补全:

from urllib.parse import urlparse

def safe_parse_url(url):
    # 如果没有检测到协议头,自动添加http://
    parsed = urlparse(url)
    if not parsed.scheme:
        url = f"http://{url}"
        parsed = urlparse(url)
    return parsed

# 测试不带协议的URL
result = safe_parse_url("google.com/foo?bar=8")
print(result.hostname)  # 输出: google.com

# 测试带协议的URL也能正常工作
result = safe_parse_url("https://stackoverflow.com/questions")
print(result.hostname)  # 输出: stackoverflow.com

内容的提问来源于stack exchange,提问作者user1618465

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:54:30