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


Posted in Python onJune 02, 2017

本文实例讲述了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 相关文章推荐
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
python提取字典key列表的方法
Jul 11 Python
python3.5仿微软计算器程序
Mar 30 Python
python变量不能以数字打头详解
Jul 06 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
python并发编程之线程实例解析
Dec 27 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
10款最好的Python开发编辑器
Jul 03 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
Python 多线程之threading 模块的使用
Apr 14 Python
PyTorch 如何检查模型梯度是否可导
Jun 05 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 #Python
Python递归函数定义与用法示例
Jun 02 #Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 #Python
Python 爬虫图片简单实现
Jun 01 #Python
Python 通过URL打开图片实例详解
Jun 01 #Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 #Python
python 内置函数filter
Jun 01 #Python
You might like
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
python re库的正则表达式入门学习教程
2019/03/08 Python
python批量下载抖音视频
2019/06/17 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python em算法的实现
2020/10/03 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
个人贷款担保书
2014/04/01 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
药品开票员岗位职责
2015/04/15 职场文书
2019大学毕业晚会主持词
2019/06/21 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle