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分割文件的常用方法
Nov 01 Python
Python自动登录126邮箱的方法
Jul 10 Python
在Django中编写模版节点及注册标签的方法
Jul 20 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
深入理解Python分布式爬虫原理
Nov 23 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
python实现学员管理系统
Feb 26 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
详解pytorch创建tensor函数
Mar 22 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
PyQT实现多窗口切换
2018/04/20 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
基于python生成器封装的协程类
2019/03/20 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
2013年大学生的自我鉴定
2013/10/24 职场文书
婚礼司仪主持词
2014/03/14 职场文书
平安工地建设方案
2014/05/06 职场文书
出国英文推荐信
2014/05/10 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
思想工作总结范文
2015/08/12 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
MongoDB 常用的crud操作语句
2021/06/20 MongoDB
mysql数据库实现设置字段长度
2022/06/10 MySQL