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的组合模式与责任链模式编程示例
Feb 02 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
python设定并获取socket超时时间的方法
Jan 12 Python
python+mysql实现学生信息查询系统
Feb 21 Python
python使用threading.Condition交替打印两个字符
May 07 Python
PyQt5图形界面播放音乐的实例
Jun 17 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
Python模块future用法原理详解
Jan 20 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
May 22 Python
python 三种方法实现对Excel表格的读写
Nov 19 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实现ODBC数据分页显示一例
2006/10/09 PHP
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
aspx中利用js实现确认删除代码
2010/07/22 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
Node.js Sequelize如何实现数据库的读写分离
2016/10/23 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
Python自动连接ssh的方法
2015/03/07 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
python使用pymysql实现操作mysql
2016/09/13 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
详解python数据结构和算法
2019/04/18 Python
详解Python中的测试工具
2019/06/09 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
安全教育心得体会
2013/12/29 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
《狮子和兔子》教学反思
2014/03/02 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
药店营业员岗位职责
2015/04/14 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫