
本文介绍如何绕过前端 javascript 渲染限制,使用 requests 直接获取 whois.com 等动态站点的真实 whois 数据,避免依赖浏览器自动化工具,兼顾效率与稳定性。
本文介绍如何绕过前端 javascript 渲染限制,使用 requests 直接获取 whois.com 等动态站点的真实 whois 数据,避免依赖浏览器自动化工具,兼顾效率与稳定性。
在爬取类似 whois.com 这类域名查询网站时,开发者常遇到一个典型问题:手动在浏览器中打开 https://www.php.cn/link/576fe2a764389ae05931dd1f11ab6566tinymail.com 能看到完整 WHOIS 信息,但用 requests.get() 直接请求却只返回空内容或占位 HTML —— 并非网站“没数据”,而是其前端采用了动态渲染策略(如通过 AJAX 加载、客户端 JS 注入、或服务端按 User-Agent/Referer/Headers 做响应分流)。
值得注意的是:whois.com 并非完全依赖前端 JavaScript 渲染。实际观察其网络行为可发现,其页面主体内容是服务端直出的 HTML(即 SSR),但关键 WHOIS 数据块(
)确实在初始 HTML 中已存在。所谓“打开浏览器才有数据”,往往是因为未正确构造请求头(如缺失 User-Agent),导致服务器返回精简版或重定向页;也可能是 URL 路径未带具体域名参数,误访问了首页模板。</p><p>✅ 正确做法是:<strong>直接向带域名路径的 URL 发起带标准请求头的 GET 请求</strong>,而非尝试解析首页再模拟提交表单。</p><div class="aritcle_card flexRow">
<div class="artcardd flexRow">
<a class="aritcle_card_img" href="/ai/1176" title="AI Room Planner"><img
src="https://img.php.cn/upload/ai_manual/001/431/639/68b7b00a91a23666.png" alt="AI Room Planner" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a href="/ai/1176" title="AI Room Planner">AI Room Planner</a>
<p>AI 室内设计工具,免费为您的房间提供上百种设计方案</p>
</div>
<a href="/ai/1176" title="AI Room Planner" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
</div>
</div><p>以下为稳定、轻量、生产可用的示例代码:</p><pre class="brush:php;toolbar:false;">import requests
def fetch_whois_data(domain: str) -> str:
url = f"https://www.php.cn/link/576fe2a764389ae05931dd1f11ab6566{domain}"
# 关键:设置合理请求头,模拟真实浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Connection": "keep-alive",
"Upgrade-Insecure-Requests": "1",
}
try:
response = requests.get(url, headers=headers, timeout=15)
response.raise_for_status() # 抛出 HTTP 错误状态
# 验证是否返回了预期的 WHOIS 原始数据块
if '<pre class="df-raw">' in response.text:
return response.text
else:
raise ValueError("WHOIS data block not found in response. Check URL or anti-bot measures.")
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
return ""
# 使用示例
html_content = fetch_whois_data("tinymail.com")
print(html_content[:500] + "..." if len(html_content) > 500 else html_content)
⚠️ 注意事项:
- 不要省略 headers:whois.com 对无 User-Agent 的请求常返回 403 或跳转到主页,添加主流浏览器 UA 是基本前提;
- 避免高频请求:该站点有反爬机制(如 IP 限速),建议添加 time.sleep(1) 或使用请求池控制并发;
-
不推荐解析 HTML 提取字段:WHOIS 原始文本(位于
)结构稳定、语义清晰,建议用正则或专用库(如 whois-parser)解析,而非依赖 DOM 层级;
- 更优替代方案:使用官方 API:whois.com 提供 RESTful WHOIS API(需注册免费 Key,含基础配额),返回结构化 JSON,无渲染干扰,推荐用于生产环境;
- 法律与合规提醒:遵守 whois.com 的 Terms of Service,禁止大规模自动化抓取用于商业数据库构建,建议优先选用合规 API。
总结:面对“看似动态实则服务端渲染”的网站,核心思路是 逆向分析真实请求特征(URL + Headers + Cookies),而非默认启用 Selenium。本方案以最小开销实现高成功率 WHOIS 数据提取,兼顾开发效率与运行性能。









