ホームページ > バックエンド開発 > Python チュートリアル > Python クローラー DNS がキャッシュを解決する方法の詳細な説明

Python クローラー DNS がキャッシュを解決する方法の詳細な説明

黄舟
リリース: 2017-06-04 10:10:48
オリジナル
2085 人が閲覧しました

この記事では、主に

Pythonクローラー DNS 解析キャッシュ方法を紹介し、関連する操作スキルと、DNS キャッシュを解析するためのソケット モジュールを使用する Python の注意事項を分析するための具体的な例と組み合わせて説明します。 この例では、Python クローラーの DNS 解決キャッシュ方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。

前書き: これは、Python クローラーの DNS 解析キャッシュ モジュールのコア コードです。興味のある方はご覧ください。

一般に、ドメイン名の DNS 解決時間は 10 ~ 60 ミリ秒であり、それほど重要ではないように見えますが、より大きなクローラーの場合、これは無視できません。たとえば、Sina Weibo をクロールしたい場合、同じドメイン名で 1,000 万件のリクエストがあり (これは多すぎません)、100,000 ~ 600,000 秒かかります。これは 1 日あたりわずか 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>_setDNSCache()方法就行了。

需要说明一下的是,如果你使用了gevent协程,并且用上了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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート