作用:
dnspython
是一个用于在 Python 中进行 DNS查询和操作的第三方库。它提供了丰富的功能,允许开发者在 Python 程序中方便地与 DNS 服务器进行交互,实现域名解析、DNS 记录查询等操作。
DNS:
DNS 缓存(Domain Name System Cache)是一种机制,用于存储 DNS 查询的结果,以减少对 DNS 服务器的重复查询,提高域名解析的效率和网络访问速度。当用户或应用程序需要访问一个域名时,系统会首先检查本地的 DNS 缓存中是否已经存在该域名对应的 IP 地址,如果存在且未过期,就直接使用缓存中的 IP 地址进行访问,而无需再次向 DNS 服务器发送查询请求。
dns.resolver.resolve
基本语法:
dns.resolver.resolve(qname, rdtype=dns.rdatatype.A)
-
qname
:必选参数,是一个字符串,代表要查询的域名,例如"example.com"
。 -
rdtype
:可选参数,指定查询的资源记录类型,默认值为dns.rdatatype.A
,即查询 A 记录(用于将域名解析为 IPv4 地址)。常见的资源记录类型有:dns.rdatatype
A
: 查询IPv4地址-
dns.rdatatype
AAAA
:查询 IPv6 地址。 -
dns.rdatatype.MX
:查询邮件交换记录。 -
dns.rdatatype.CNAME
:查询规范名称记录。返回值
返回值:
-
dns.resolver.resolve
方法返回一个dns.resolver.Answer
对象,该对象包含了 DNS 查询的结果。可以通过遍历这个对象来获取具体的资源记录信息。
例子:
域名查询(A 记录查询)
import dns.resolver
a = dns.resolver.resolve("www.hzau.edu.cn",'A')
ip = a.response.answer[0].to_text().split(" ")[-1]
print("华中农业大学主页的IP地址:" + ip)
#华中农业大学主页的IP地址:202.114.33.100
IPv4地址
域名
:要解析的目标域名(例如www.hzau.edu.cn
)。IN
:表示 Internet 类别,是 DNS 记录的标准分类。A
:记录类型,表示 IPv4 地址映射。IP地址
:域名对应的 IPv4 地址(例如123.45.67.89
)。假设 DNS 查询返回以下结果:
www.hzau.edu.cn. IN A 202.114.33.100
- 域名:
www.hzau.edu.cn.
(末尾的.
表示根域,通常可省略)。- 记录类型:
A
。- IP 地址:
202.114.33.100
。
思考:在获取域名和IP地址的对应关系后,用数组和列表的形式来维护这 些关系,实现爬虫自己的DNS缓存。
import dns.resolver
a = dns.resolver.resolve("www.hzau.edu.cn",'A')
ips = [a.to_text().split(" ")[-1] for a in a.response.answer]
for ip in ips:
print(ip)
列表推导式整体结构
ips = [expression for item in iterable]
这是 Python 列表推导式的通用结构,它能够简洁地创建一个新列表。在这个结构里:
expression
是对每个元素进行处理的表达式。item
是从可迭代对象中取出的元素。iterable
是一个可迭代对象,像列表、元组、集合等。