本文目录导读:

实现批量查询域名信息(如注册信息、DNS记录、Whois数据等)有多种方法,取决于你的技术栈、预算和需要的详细程度。
以下是三种主流方案,从简单到复杂,适用于不同场景。
使用在线批量查询工具(零代码,适合小白)
这是最快、最简单的方法,适合对几到几百个域名进行一次性查询,无需编程。
- 推荐工具:
- Whois.com 批量查询:支持一次输入多个域名,查询Whois信息。
- Domaintools:专业工具,提供批量Whois查询、反向IP查询等,部分功能免费。
- 站长工具(如 chinaz.com):支持批量Ping、DNS查询、Whois查询(国内速度更快)。
- 步骤:
- 打开网站。
- 找到“批量查询”或“多域名查询”输入框。
- 一行一个域名,粘贴进去。
- 点击查询,等待结果。
- 优点:无需任何设置。
- 缺点:隐私性差(数据会经过第三方服务器),查询数量有限制,无法自动化集成。
使用命令行脚本(Python + 开源库,适合开发者)
这是最灵活、可定制、可自动化的方式,你可以读取一个包含域名的文件,然后批量获取信息。
批量获取 WhoIs 信息(注册人、到期时间等)
使用 whois 库。
-
安装依赖:
pip install python-whois
-
Python 脚本示例 (
bulk_whois.py):import whois import pandas as pd # 用于保存为Excel或CSV from tqdm import tqdm # 显示进度条 # 要查询的域名列表 domains = ["example.com", "google.com", "github.com", "nonexistentdomain.xyz"] results = [] for domain in tqdm(domains, desc="查询Whois"): try: w = whois.whois(domain) results.append({ "domain": domain, "registrar": w.registrar, "creation_date": w.creation_date, "expiration_date": w.expiration_date, "name_servers": w.name_servers if w.name_servers else [], "status": "Success" }) except Exception as e: results.append({ "domain": domain, "registrar": "Error", "creation_date": None, "expiration_date": None, "name_servers": [], "status": f"Error: {e}" }) # 保存为 CSV 文件 df = pd.DataFrame(results) df.to_csv("domain_whois_results.csv", index=False, encoding='utf-8-sig') print("查询完成,结果保存在 domain_whois_results.csv")
批量获取 DNS 记录(A记录、MX记录等)
使用 dnspython 库。
-
安装依赖:
pip install dnspython
-
Python 脚本示例:
import dns.resolver import pandas as pd domains = ["example.com", "google.com"] record_types = ["A", "MX", "NS", "TXT"] results = [] for domain in domains: for record_type in record_types: try: answers = dns.resolver.resolve(domain, record_type) for rdata in answers: results.append({ "domain": domain, "type": record_type, "value": str(rdata) }) except dns.resolver.NoAnswer: results.append({"domain": domain, "type": record_type, "value": "No Record"}) except Exception as e: results.append({"domain": domain, "type": record_type, "value": f"Error: {e}"}) df = pd.DataFrame(results) df.to_csv("domain_dns_results.csv", index=False) print("DNS查询完成")
优先考虑异步处理(高性能)
对于几千或几万个域名,同步请求会很慢,使用 aiohttp 或 asyncio 可以显著提高速度。
import asyncio import aiohttp import whois # 注意:whois库本身是同步的,需要注意,但可通过 run_in_executor 优化。 # 核心思路:使用 asyncio 并发执行多个查询任务
调用企业级 API(高频率、高可靠性,适合生产环境)
如果你需要频繁查询大量域名(每天几万次以上),或者需要更准确的数据(如实时Whois、注册商API),建议使用付费API。
-
推荐服务:
- WhoisXML API:提供Whois、DNS、反向Whois等全集,按查询次数付费。
- SecurityTrails:提供DNS历史、子域名枚举、Whois等,API功能强大。
- DomainTools API:行业标准,数据丰富,但较贵。
- IP2Location:提供Whois、DNS和IP定位。
-
实现方式:
- 在服务商网站注册并获取 API Key。
- 编写脚本发送 HTTP 请求。
- 解析 JSON/XML 响应。
-
示例(伪代码):
import requests import pandas as pd API_KEY = "你的_WHOISXML_API_KEY" domains = ["example.com", "google.com"] results = [] for domain in domains: url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey={API_KEY}&domainName={domain}&outputFormat=JSON" response = requests.get(url) data = response.json() # 解析 data 提取域名、注册人、到期日等 results.append(...)
总结建议
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 一次查询几十个域名 | 在线工具 | 最快,不需要写代码 |
| 查询几百个域名 | Python + python-whois + dnspython |
可以导出CSV,可定制 |
| 查询几千个域名 | Python + 异步库(aiohttp) | 速度大幅提升 |
| 每日查询上万次 | 调用稳定API(如WhoisXML) | 避免被封IP,数据更准确 |
| 需要域名注册API | 调用域名注册商API(如GoDaddy, Namecheap, 阿里云) | 可以查询自己账户下的域名状态 |
注意事项
- 速率限制:无论是Whois服务器还是在线API,都有请求频率限制,频繁请求可能导致你的IP被临时封禁,建议在脚本中添加
time.sleep(1)或使用指数退避策略。 - 数据准确性:很多域名开启了Whois隐私保护,公开的Whois信息可能是代理商的,而非真实的注册人信息。
- 合规性:查询到的Whois信息受法律保护,不要用于批量营销或骚扰,否则可能违反GDPR等法规。
- 命令行替代:如果你熟悉Linux,也可以直接用
whois命令配合xargs或parallel:cat domains.txt | xargs -P 10 -I {} whois {} > output.txt
如果你能提供更详细的需求(如需要查询的具体信息类型、数量级、编程语言偏好),我可以帮你定制更精确的代码。