如何使用Python获取网站重定向后的主域名
实现方案汇总
方案1:实时HTTP请求跟随重定向(推荐,准确率最高)
这个方案完全模拟浏览器跳转逻辑,适配服务端返回3xx状态码的重定向场景,实现成本低:
- 步骤:
- 对输入的域名自动补全HTTP/HTTPS协议头,优先尝试HTTPS避免二次跳转
- 发起
HEAD请求(相比GET请求无需拉取响应内容,性能更高),配置允许跟随重定向,重定向次数上限设为5~10次避免死循环 - 从最终响应的URL中提取host部分,即为目标主域名
- Python示例代码(基于requests库):
import requests from urllib.parse import urlparse def get_final_domain(input_domain: str) -> str: # 补全协议 if not input_domain.startswith(("http://", "https://")): input_domain = f"https://{input_domain}" # 配置请求头,避免被网站反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } try: resp = requests.head( input_domain, headers=headers, allow_redirects=True, timeout=5, verify=True ) final_url = resp.url except requests.exceptions.SSLError: # HTTPS访问失败降级用HTTP input_domain = input_domain.replace("https://", "http://") resp = requests.head( input_domain, headers=headers, allow_redirects=True, timeout=5 ) final_url = resp.url # 提取域名部分 return urlparse(final_url).netloc # 测试 print(get_final_domain("www.yalochat.com")) # 输出 www.yalo.com print(get_final_domain("www.yalo.com")) # 输出 www.yalo.com
方案2:无头浏览器模拟访问(适配前端JS跳转场景)
如果目标网站的重定向是通过前端JS代码实现的,普通HTTP请求无法捕获,就用无头浏览器加载页面后取最终地址:
- 可以用Selenium、Playwright等工具,配置无头模式启动浏览器,加载输入的域名后等待页面稳定,读取当前页面URL提取host即可
- 优点是覆盖所有浏览器可见的跳转场景,缺点是性能较低,资源消耗更大
注意事项
- 若需要的是不带www的根域名,可以在拿到最终host后额外做一次根域名提取,结合公共后缀列表(PSL)处理即可
- 注意配置合理的超时时间,避免无响应的网站拖慢整体流程
- 部分网站会针对非浏览器请求返回不同的响应,伪造UA头可以解决绝大多数这类问题
内容的提问来源于stack exchange,提问作者ohoh7171
相关产品推荐
相关产品推荐

