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两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python 根据时间来生成唯一的字符串方法
Jan 14 Python
ActiveMQ:使用Python访问ActiveMQ的方法
Jan 30 Python
python实现二维数组的对角线遍历
Mar 02 Python
Python绘制频率分布直方图的示例
Jul 08 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python采集股票数据并制作可视化柱状图
Apr 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP中对数据库操作的封装
2006/10/09 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
四个PHP非常实用的功能
2015/09/29 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
2011/01/17 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
在Python的Django框架中加载模版的方法
2015/07/16 Python
Python基于pygame实现图片代替鼠标移动效果
2015/11/11 Python
python实现多进程通信实例分析
2019/09/01 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
python装饰器代替set get方法实例
2019/12/19 Python
会话Bean的种类
2013/11/07 面试题
机关门卫岗位职责
2013/12/30 职场文书
学生喝酒检讨书
2014/02/06 职场文书
酒店总经理助理职责
2014/02/12 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
计生工作先进事迹
2014/08/15 职场文书
打架检讨书范文
2015/01/27 职场文书
世界名著读书笔记
2015/06/25 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python