URL 基础概念拆解
在动手写代码之前,先搞清楚 URL 到底长什么样。一个标准的 URL 通常包含协议、域名、端口、路径和参数等部分。比如 http://www.example.com:80/index.html?username=admin&password=123456#anchor。
这里容易踩的坑是拼写错误,比如把 .com 写成 .om,或者混淆了 Host 和域名的概念。端口号默认情况下可以省略(HTTP 是 80,HTTPS 是 443),但在某些严格校验场景下必须显式指定。锚点(Anchor)主要用于单页应用内的跳转定位,后端处理时通常会被忽略。
Python 中的 URL 解析实战
Python 标准库里的 urllib.parse 模块就是干这个的,不需要额外安装第三方包。
from urllib.parse import urlparse, parse_qs
url = "http://www.baidu.com:80/search?q=python&page=1#top"
parsed = urlparse(url)
print(f"协议:{parsed.scheme}")
print(f"域名:{parsed.hostname}")
print(f"端口:{parsed.port}")
print(f"路径:{parsed.path}")
print(f"查询参数:{parse_qs(parsed.query)}")
运行这段代码你会发现,hostname 自动去掉了端口,而 port 属性会返回整数类型,方便后续逻辑判断。如果 URL 没带端口,它会是 None。
简单的 URL 合法性校验
光解析不够,还得知道它是不是个'真'链接。虽然可以用正则,但推荐结合 urlparse 的结果做逻辑判断。
import re
def validate_url(url):
# 基础结构检查
parsed = urlparse(url)
# 必须有协议和域名
if not parsed.scheme or not parsed.netloc:
return False
# 协议白名单
if parsed.scheme [, ]:
domain_pattern =
re.(domain_pattern, parsed.hostname):
test_urls = [
,
,
]
u test_urls:
()


