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中%r和%s的详解及区别
Mar 16 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
django中模板的html自动转意方法
May 27 Python
分析python请求数据
Aug 19 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
Python 发送邮件方法总结
Aug 10 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
分享几种python 变量合并方法
Mar 20 Python
python神经网络学习 使用Keras进行回归运算
May 04 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
[02:25]DOTA2英雄基础教程 熊战士
2014/01/03 DOTA
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Django中间件基础用法详解
2019/07/18 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python+Appium实现自动化测试的使用步骤
2020/03/24 Python
Python request使用方法及问题总结
2020/04/26 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
主持词开场白
2014/03/17 职场文书
节水倡议书范文
2014/04/15 职场文书
组织鉴定材料
2014/06/02 职场文书
债务纠纷委托书
2014/08/30 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang