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实现2014火车票查询代码分享
Jan 10 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
python静态方法实例
Jan 14 Python
python将文本转换成图片输出的方法
Apr 28 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python闭包的两个注意事项(推荐)
Mar 20 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
Python将图片转换为字符画的方法
Jun 16 Python
python仿evething的文件搜索器实例代码
May 13 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
关于Python解包知识点总结
May 05 Python
python munch库的使用解析
May 25 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下过滤HTML代码的函数
2007/12/10 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
JS 对象(Object)和字符串(String)互转方法
2016/05/20 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python requests库用法实例详解
2018/08/14 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
allbeauty美国:英国在线美容店
2019/03/11 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
小学生综合素质评语
2014/04/23 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
社会实践活动总结范文
2014/07/03 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
单身证明格式样本
2015/06/15 职场文书
Java spring单点登录系统
2021/09/04 Java/Android