In diesem Artikel wird hauptsächlich die PythonCrawler-DNS-Parsing-Caching-Methode vorgestellt, die relevanten Bedienfähigkeiten analysiert und Hinweise dazu gegeben, wie Python das Socket-Modul zum Parsen des DNS-Cache verwendet auf konkrete Beispiele. , Freunde in Not können sich darauf beziehen
Dieser Artikel beschreibt die DNS-Auflösungs-Caching-Methode des Python-Crawlers anhand von Beispielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Vorwort:
Dies ist der Kerncode im DNS-Auflösungs-Caching Modul im Python-Crawler. Es handelt sich um den Code des letzten Jahres, der jetzt für Interessierte zum Anschauen freigegeben ist.
Im Allgemeinen liegt die DNS-Auflösungszeit eines Domainnamens zwischen 10 und 60 Millisekunden, was unbedeutend erscheint, aber bei größeren Crawlern kann dies nicht ignoriert werden. Wenn wir beispielsweise Sina Weibo crawlen möchten, gibt es 10 Millionen Anfragen unter demselben Domainnamen (was nicht allzu viel ist), sodass es zwischen 100.000 und 600.000 Sekunden dauert, was nur 86.400 Sekunden pro Tag entspricht. Mit anderen Worten, die DNS-Auflösung allein dauert mehrere Tage. Wenn man zu diesem Zeitpunkt DNS-Auflösungs-Caching hinzufügt, ist der Effekt offensichtlich.
Geben Sie den Code direkt unten ein und die Anweisungen finden Sie hinten.
Code:
# 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
Beschreibung:
Eigentlich Es ist nicht schwierig. Speichern Sie einfach den Cache im Socket, um eine wiederholte Erfassung zu vermeiden.
Sie können den obigen Code in eine dns_cache.py-Datei einfügen und diese -Methode einfach im Crawler--Framework _setDNSCache()
aufrufen.
Es sollte beachtet werden, dass, wenn Sie gevent coroutine verwenden und mon<a href="http://www.php.cn/wiki/1051.html" target="_blank">key verwenden <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
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie der Python-Crawler-DNS den Cache auflöst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!