如何在Python 3中使用DNS解析器?及dnspython导入报错排查
在Python 3中使用DNS解析器并查询MX记录
先解决ModuleNotFoundError: No module named 'dns'的问题
这个报错大概率是因为dnspython包没安装到PyCharm当前使用的虚拟环境里——毕竟PyCharm默认会给每个项目创建独立的虚拟环境,和系统全局的Python环境是分开的。给你两种靠谱的解决办法:
方法1:直接在PyCharm内安装
- 打开你的PyCharm项目,点击顶部菜单栏的
File→Settings(Windows/Linux)或者PyCharm→Settings(Mac) - 在弹出的窗口里,找到
Project: [你的项目名]→Python Interpreter - 点击右上角的
+号,在搜索框输入dnspython,找到后点击Install Package,等待安装完成即可。
方法2:用终端命令安装(确保对应虚拟环境)
- 如果你的项目用了虚拟环境,先激活它:
- Windows:在PyCharm的Terminal里输入
venv\Scripts\activate(venv是默认虚拟环境文件夹名,改了的话对应替换) - Mac/Linux:输入
source venv/bin/activate
- Windows:在PyCharm的Terminal里输入
- 激活环境后,输入
pip install dnspython,等待安装完成。
安装完成后,查询MX记录的代码示例
现在可以正常导入dns.resolver了,下面是查询域名MX记录的完整实用代码:
import dns.resolver def get_mx_records(domain): try: # 指定查询记录类型为MX answers = dns.resolver.resolve(domain, 'MX') # 遍历并输出结果 print(f"域名 {domain} 的MX记录:") for rdata in answers: print(f"优先级: {rdata.preference}, 邮件服务器: {rdata.exchange}") return [(rdata.preference, rdata.exchange) for rdata in answers] except dns.resolver.NXDOMAIN: print(f"错误:域名 {domain} 不存在") except dns.resolver.NoAnswer: print(f"错误:域名 {domain} 未配置MX记录") except Exception as e: print(f"查询出错:{str(e)}") # 调用示例 get_mx_records("example.com")
代码小解释:
dns.resolver.resolve(domain, 'MX'):核心方法,指定要查询的域名和记录类型(这里是MX)rdata.preference:MX记录的优先级,数字越小优先级越高rdata.exchange:负责接收该域名邮件的服务器地址- 异常处理:覆盖了域名不存在、无MX记录等常见场景,避免程序直接崩溃
额外小技巧
如果你还想查询其他类型的DNS记录(比如A、AAAA、CNAME),只需要把resolve方法的第二个参数改成对应类型即可,比如dns.resolver.resolve("example.com", 'A')就能查询A记录。
内容的提问来源于stack exchange,提问作者Awesome
相关产品推荐
相关产品推荐

