这篇文章主要介绍了python爬虫dns解析缓存方法,结合具体实例形式分析了python使用socket模块解析dns缓存的相关操作技巧与注意事项,需要的朋友可以参考下
本文实例讲述了Python爬虫DNS解析缓存方法。分享给大家供大家参考,具体如下:
前言:
这是Python爬虫中DNS解析缓存模块中的核心代码,是去年的代码了,现在放出来 有兴趣的可以看一下。
一般一个域名的DNS解析时间在10~60毫秒之间,这看起来是微不足道,但是对于大型一点的爬虫而言这就不容忽视了。例如我们要爬新浪微博,同个域名下的请求有1千万(这已经不算多的了),那么耗时在10~60万秒之间,一天才86400秒。也就是说单DNS解析这一项就用了好几天时间,此时加上DNS解析缓存,效果就明显了。
立即学习“Python免费学习笔记(深入)”;
下面直接放代码,说明在后面。
代码:
# encoding=utf-8# ---------------------------------------# 版本:0.1# 日期:2016-04-26# 作者:九茶# 开发环境: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爬虫DNS如何解析缓存的方法详解的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2272031.html