爬虫的DNS缓存

爬虫中的DNS缓存的实现


一、实验背景

在实现爬虫的过程中,需要对域名进行DNS解析,要向DNS服务器发起请求。当爬虫的量达到十万、千万级别时,这一部分的耗时就非常可观了,同时也给服务器增大了复旦。因此需要对其进行优化,使其能实现DNS缓存,不必发起太多请求。

二、实现方法

首先想到的就是修改hosts文件,这样能直接省下向DNS发起请求的时间。但是缺点是无法实时更新,如果域名和IP发生了变化则需要手动更改。若未及时更新,甚至可能导致爬虫没有结果。

于是我们想到的方法就是每次查询之前查询请求的域名是否存在于缓存中,查阅资料后可以得出代码:

import socket

_dnscache = {}#dns缓存list,用来记录域名和对应的IP

def _setDNSCache():

    def igetaddrinfo(*args,**kwargs):

        if args in _dnscache: #查询请求的域名是否在DNS缓存中

            return_dnscache[args]

        else:

            _dnscache[args] = socket.igetaddrinfo(*args,**kwargs)

#调用igetaddrinfo将DNS加入缓存

            return _dnscache[args]

    if not hasattr(socket, 'igetaddrinfo'): 

#将socket类的getddrinfo打一个patch&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值