Python爬虫DNS解析缓存方法实例分析

发布时间 - 2026-01-11 01:39:03    点击率:

本文实例讲述了Python爬虫DNS解析缓存方法。分享给大家供大家参考,具体如下:

前言:

这是Python爬虫中DNS解析缓存模块中的核心代码,是去年的代码了,现在放出来 有兴趣的可以看一下。

一般一个域名的DNS解析时间在10~60毫秒之间,这看起来是微不足道,但是对于大型一点的爬虫而言这就不容忽视了。例如我们要爬新浪微博,同个域名下的请求有1千万(这已经不算多的了),那么耗时在10~60万秒之间,一天才86400秒。也就是说单DNS解析这一项就用了好几天时间,此时加上DNS解析缓存,效果就明显了。

下面直接放代码,说明在后面。

代码:

# encoding=utf-8
# ---------------------------------------
#  版本:0.1
#  日期:2016-04-26
#  作者:九茶<bone_ace@163.com>
#  开发环境:Win64 + Python 2.7
# ---------------------------------------
import socket
# from gevent import socket
_dnscache = {}
def _setDNSCache():
  """ DNS缓存 """
  def _getaddrinfo(*args, **kwargs):
    if args in _dnscache:
      # print str(args) + " in cache"
      return _dnscache[args]
    else:
      # print str(args) + " not in cache"
      _dnscache[args] = socket._getaddrinfo(*args, **kwargs)
      return _dnscache[args]
  if not hasattr(socket, '_getaddrinfo'):
    socket._getaddrinfo = socket.getaddrinfo
    socket.getaddrinfo = _getaddrinfo

说明:

其实也没什么难度,就是将socket里面的缓存保存下来,避免重复获取。
可以将上面的代码放在一个dns_cache.py文件里,爬虫框架里调用一下这个_setDNSCache()方法就行了。

需要说明一下的是,如果你使用了gevent协程,并且用上了monkey.patch_all(),要注意此时爬虫已经改用gevent里面的socket了,DNS解析缓存模块也应该要用gevent的socket才行。

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


# Python  # 爬虫  # DNS  # 解析缓存  # Python模块域名dnspython解析  # python批量处理多DNS多域名的nslookup解析实现  # 利用Python+阿里云实现DDNS动态域名解析的方法  # Python实现的简单dns查询功能示例  # python实现域名系统(DNS)正向查询的方法  # Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子  # Python写的一个简单DNS服务器实例  # python实现DNS正向查询、反向查询的例子  # Python DNS查询放大攻击实现原理解析  # 的是  # 进阶  # 这是  # 操作技巧  # 这一  # 如果你  # 放在  # 相关内容  # 也没  # 几天  # 这就  # 数据结构  # 用了  # 要注意  # 给大家  # 要用  # 有兴趣  # 看一下  # 在后面  # 才行 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速启动建站代理加盟业务?  googleplay官方入口在哪里_Google Play官方商店快速入口指南  手机软键盘弹出时影响布局的解决方法  成都网站制作公司哪家好,四川省职工服务网是做什么用?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  javascript基本数据类型及类型检测常用方法小结  如何用AWS免费套餐快速搭建高效网站?  无锡营销型网站制作公司,无锡网选车牌流程?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel如何使用Sanctum进行API认证?(SPA实战)  用v-html解决Vue.js渲染中html标签不被解析的问题  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  python中快速进行多个字符替换的方法小结  Linux系统命令中screen命令详解  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  微信小程序制作网站有哪些,微信小程序需要做网站吗?  PHP 500报错的快速解决方法  如何在IIS管理器中快速创建并配置网站?  java中使用zxing批量生成二维码立牌  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  java获取注册ip实例  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  如何用已有域名快速搭建网站?  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel如何发送系统通知?(Notification渠道示例)  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何基于PHP生成高效IDC网络公司建站源码?  详解jQuery停止动画——stop()方法的使用  如何在IIS中新建站点并配置端口与物理路径?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Linux安全能力提升路径_长期防护思维说明【指导】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  JS经典正则表达式笔试题汇总  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  微信小程序 配置文件详细介绍  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全