Python爬虫DNS解析缓存方法,Python爬虫DNS解析缓存

作者: 金沙澳门官网  发布:2019-10-04

本文实例叙述了Python爬虫DNS分析缓存方法。分享给大家供大家参谋,具体如下:

Python爬虫DNS解析缓存方法实例深入分析,python实例深入分析

本文实例叙述了Python爬虫DNS解析缓存方法。分享给咱们供大家仿效,具体如下:

前言:

那是Python爬虫中DNS解析缓存模块中的主旨代码,是二零一八年的代码了,以后放出去 风野趣的能够看一下。

日常三个域名的DNS深入分析时间在10~60皮秒之间,那看起来是不值得一提,不过对于大型一点的爬虫来讲那就不容忽视了。譬喻大家要爬乐乎新浪,同个域名下的乞请有1千万(这已经不算多的了),那么耗费时间在10~60万秒之内,一天才86400秒。约等于说单DNS剖析这一项就用了一些天时间,此时丰硕DNS深入分析缓存,效果就旗帜分明了。

上边直接放代码,表达在前边。

代码:

# encoding=utf-8
# ---------------------------------------
#  版本:0.1
#  日期:2016-04-26
#  作者:九茶<[email protected]>
#  开发环境: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爬虫DNS分析缓存方法。分享给我们供大家参谋,具体如下: 前言:...

前言:

那是Python爬虫中DNS深入分析缓存模块中的大旨代码,是2018年的代码了,以后放出去 风乐趣的能够看一下。

常常二个域名的DNS分析时间在10~60皮秒之间,那看起来是不屑一顾,不过对于大型一点的爬虫来说那就不容忽视了。举个例子大家要爬乐乎和讯,同个域名下的伸手有1千万(这一度不算多的了),那么耗费时间在10~60万秒之内,一天才86400秒。也便是说单DNS剖析这一项就用了少好些天时间,此时丰盛DNS分析缓存,效果就一望而知了。

下边直接放代码,表明在前边。

代码:

 

 代码如下

# encoding=utf-8

# ---------------------------------------

#  版本:0.1

#  日期:2016-04-26

#  作者:九茶

#  开垦情状:Win64 + Python 2.7

# ---------------------------------------

importsocket

# from gevent import socket

_dnscache={}

def_setDNSCache():

  """ DNS缓存 """

  def_getaddrinfo(*args,**kwargs):

    ifargsin_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]

  ifnothasattr(socket,'_getaddrinfo'):

    socket._getaddrinfo=socket.getaddrinfo

    socket.getaddrinfo=_getaddrinfo

 

说明:

实际也没怎么难度,正是将socket里面包车型地铁缓存保存下去,避免重新获取。
能够将方面包车型客车代码放在贰个dns_cache.py文件里,爬虫框架里调用一下那一个_setDNSCache()方法就行了。

亟待说宾博(Nutrilon)下的是,假诺您使用了gevent协程,何况用上了monkey.patch_all(),要稳重此时爬虫已经济体改用gevent里面包车型大巴socket了,DNS解析缓存模块也应有要用gevent的socket才行。

本文由金沙澳门官网送注册58发布于金沙澳门官网,转载请注明出处:Python爬虫DNS解析缓存方法,Python爬虫DNS解析缓存

关键词:

上一篇:没有了
下一篇:没有了