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中的高级数据结构详解
Mar 27 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
python DataFrame获取行数、列数、索引及第几行第几列的值方法
Apr 08 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
8段用于数据清洗Python代码(小结)
Oct 31 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
Jul 03 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
python实现学生信息管理系统(精简版)
Nov 27 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中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
2011/11/10 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
2015/12/15 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
使用python实现滑动验证码功能
2019/08/05 Python
python3 map函数和filter函数详解
2019/08/26 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
python调用百度API实现人脸识别
2020/11/17 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
教师岗位职责
2013/11/17 职场文书
普师专业个人自荐信范文
2013/11/26 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
就业协议书范本
2014/04/11 职场文书
就业意向书范本
2015/05/11 职场文书
导游词之山海关
2019/12/10 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
mysql如何能有效防止删库跑路
2021/10/05 MySQL
MySQL Server层四个日志的实现
2022/03/31 MySQL