Python爬虫DNS解析缓存方法实例分析

作者:九茶 时间:2021-02-10 11:56:54 

本文实例讲述了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,爬虫,DNS
0
投稿

猜你喜欢

  • Python的Django框架中settings文件的部署建议

    2023-07-08 21:39:43
  • 高性能WEB开发 JS、CSS的合并、压缩、缓存管理

    2023-01-02 11:03:26
  • vue登录页面回车执行事件@keyup.enter.native问题

    2023-07-02 17:01:42
  • Access数据库操作中出现的怪现象

    2008-04-24 14:22:00
  • 缓存是如何实现的?

    2009-11-01 15:35:00
  • 建立用户体验过程的实用指南

    2007-11-19 12:53:00
  • 多线程爬虫批量下载pcgame图片url 保存为xml的实现代码

    2021-04-12 15:06:27
  • js中Array.forEach跳出循环的方法实例

    2024-05-11 09:32:22
  • GridView自定义分页的四种存储过程

    2024-01-27 09:52:25
  • sqlserver 中时间为空的处理小结

    2024-01-13 06:07:40
  • php小经验:解析preg_match与preg_match_all 函数

    2023-10-31 08:55:23
  • python练习之循环控制语句 break 与 continue

    2022-04-15 12:31:20
  • CentOS7使用yum安装Golang的超详细步骤

    2024-04-30 10:08:01
  • python Django框架实现自定义表单提交

    2021-01-04 14:52:42
  • 编写数据库asp程序需注意的问题

    2007-12-29 12:57:00
  • 基于Python检测动态物体颜色过程解析

    2022-03-20 09:07:30
  • 使用layui 的layedit定义自己的toolbar方法

    2023-08-24 16:21:43
  • 优化MySQL数据库性能的八大“妙手”

    2007-11-18 14:49:00
  • jquery ui bootstrap 实现自定义风格

    2024-05-09 09:05:24
  • Python版的文曲星猜数字游戏代码

    2023-08-12 16:39:19
  • asp之家 网络编程 m.aspxhome.com