>  기사  >  백엔드 개발  >  Python 크롤러 DNS가 캐시를 확인하는 방법에 대한 자세한 설명

Python 크롤러 DNS가 캐시를 확인하는 방법에 대한 자세한 설명

黄舟
黄舟원래의
2017-06-04 10:10:482016검색

이 글에서는 Python크롤러 DNS 파싱캐싱 방법을 주로 소개하고, 소켓 모듈을 사용하여 DNS 캐시를 파싱하는 Python의 관련 운영 기술과 주의 사항을 분석하는 구체적인 예를 결합하여 도움이 필요한 친구는 이 글을 참조할 수 있습니다.

이 예에서는 Python 크롤러 DNS 확인 캐싱 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

머리말:

Python 크롤러의 DNS 구문 분석 캐시 모듈에 있는 핵심 코드입니다. 이제 공개되었습니다. 관심 있는 분들은 살펴보세요.

일반적으로 도메인 이름의 DNS 확인 시간은 10~60밀리초로 중요하지 않은 것처럼 보이지만 대규모 크롤러의 경우 이는 무시할 수 없습니다. 예를 들어, Sina Weibo를 크롤링하려는 경우 동일한 도메인 이름으로 천만 건의 요청이 있으므로(과도하지 않음) 100,000~600,000초가 소요되며 이는 하루에 86,400초에 불과합니다. 즉, 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, &#39;_getaddrinfo&#39;):
    socket._getaddrinfo = socket.getaddrinfo
    socket.getaddrinfo = _getaddrinfo

지침:

사실 어렵지 않습니다. 반복 획득을 피하기 위해 소켓에 캐시를 저장하기만 하면 됩니다.
위 코드를 dns_cache.py 파일에 넣고 크롤러 프레임워크에서 이 _setDNSCache() 메소드를 호출하면 됩니다.

gevent 코루틴을 사용하고 mon<a href="http://www.php.cn/wiki/1051.html" target="_blank">key<code>mon<a href="http://www.php.cn/wiki/1051.html" target="_blank">key</a>.patch_<a href="http://www.php.cn/wiki/1483.html" target="_blank">all</a>().patch_를 사용한다면 설명이 필요합니다. all

() 현재 크롤러가 gevent로 전환되어 있으니 참고하시기 바랍니다. 내부에 소켓이 있고 DNS 확인 캐시 모듈도 gevent의 소켓을 사용해야 합니다. 🎜

위 내용은 Python 크롤러 DNS가 캐시를 확인하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.