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爬虫
Dec 25 Python
python循环监控远程端口的方法
Mar 14 Python
python抓取百度首页的方法
May 19 Python
Python中的默认参数实例分析
Jan 29 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
使用Tensorflow将自己的数据分割成batch训练实例
Jan 20 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Python如何把字典写入到CSV文件的方法示例
Aug 23 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
python实现跨年表白神器--你值得拥有
Jan 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 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
Ajax基础知识详解
2017/02/17 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python面向对象法实现图书管理系统
2019/04/19 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
咨询公司各岗位职责
2013/12/02 职场文书
大学生求职自荐信
2013/12/12 职场文书
人力资源总监工作说明
2014/03/03 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
2014年护理部工作总结
2014/11/14 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
护士自荐信范文(2016推荐篇)
2016/01/28 职场文书