Python-Paket für Multi-Threaded-Spinne mit / Proxy-Unterstützung?
-
06-07-2019 - |
Frage
Statt nur mit urllib weiß jemand, der effizientesten Paket für die schnelle, multithreaded Herunterladen von URLs, die durch HTTP-Proxies arbeiten kann? Ich kenne ein paar wie Verdreht, Scrapy, Libcurl etc., aber ich weiß nicht genug über sie eine Entscheidung zu treffen oder auch wenn sie Proxies .. Wer weiß, die besten für meine Zwecke verwenden kann? Dank!
Lösung
ist das einfache dies in Python zu implementieren.
Die urlopen () Funktion funktioniert transparent mit Proxies, die tun keine Authentifizierung erforderlich ist. In einem Unix oder Windows-Umgebung, stellen die http_proxy, ftp_proxy oder gopher_proxy Umgebungsvariablen zu einer URL, die identifiziert den Proxy-Server vor Start des Python-Interpreter
# -*- coding: utf-8 -*-
import sys
from urllib import urlopen
from BeautifulSoup import BeautifulSoup
from Queue import Queue, Empty
from threading import Thread
visited = set()
queue = Queue()
def get_parser(host, root, charset):
def parse():
try:
while True:
url = queue.get_nowait()
try:
content = urlopen(url).read().decode(charset)
except UnicodeDecodeError:
continue
for link in BeautifulSoup(content).findAll('a'):
try:
href = link['href']
except KeyError:
continue
if not href.startswith('http://'):
href = 'http://%s%s' % (host, href)
if not href.startswith('http://%s%s' % (host, root)):
continue
if href not in visited:
visited.add(href)
queue.put(href)
print href
except Empty:
pass
return parse
if __name__ == '__main__':
host, root, charset = sys.argv[1:]
parser = get_parser(host, root, charset)
queue.put('http://%s%s' % (host, root))
workers = []
for i in range(5):
worker = Thread(target=parser)
worker.start()
workers.append(worker)
for worker in workers:
worker.join()
Andere Tipps
Proxys in der Regel Filter Websites kategorisch auf, wie die Website erstellt wurde. Es ist schwierig, Daten über Proxies basierend auf Kategorien zu übertragen. ZB youtube als Audio- / Video-Streams klassifiziert daher youtube an einigen Stellen espically Schulen blockiert. Wenn Sie möchten, Proxys umgehen und die Daten von einer Website zu erhalten und es in Ihrer eigenen Original-Webseite wie eine dot com Website, die es Ihnen registriert werden kann. Wenn Sie machen und Registrierung auf der Website zu kategorisieren Ihre Website wie alles, was Sie wollen.