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

如何使用Python获取网站重定向后的主域名

实现方案汇总

方案1:实时HTTP请求跟随重定向(推荐,准确率最高)

这个方案完全模拟浏览器跳转逻辑,适配服务端返回3xx状态码的重定向场景,实现成本低:

  • 步骤:
    1. 对输入的域名自动补全HTTP/HTTPS协议头,优先尝试HTTPS避免二次跳转
    2. 发起HEAD请求(相比GET请求无需拉取响应内容,性能更高),配置允许跟随重定向,重定向次数上限设为5~10次避免死循环
    3. 从最终响应的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:15:05