Paquet Python pour Spider multi-thread avec support proxy?
-
06-07-2019 - |
Question
Au lieu d'utiliser simplement urllib, est-ce que quelqu'un connaît le package le plus efficace pour le téléchargement rapide et multithread d'URL pouvant fonctionner via des proxies http? J'en connais quelques-uns comme Twisted, Scrapy, libcurl, etc., mais je n'en sais pas assez sur eux pour prendre une décision ou même s'ils peuvent utiliser des procurations. Quelqu'un connaît-il le meilleur à mes fins? Merci!
La solution
est simple à implémenter en python.
La fonction urlopen () fonctionne de manière transparente avec des mandataires qui font pas besoin d'authentification. Dans un Unix ou Windows, définissez le http_proxy, ftp_proxy ou gopher_proxy les variables d'environnement à une URL qui identifie le serveur proxy avant démarrer l'interpréteur Python
# -*- 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()
Autres conseils
généralement, les mandataires filtrent les sites Web de manière catégorique en fonction de la manière dont ils ont été créés. Il est difficile de transmettre des données via des serveurs mandataires basés sur des catégories. Par exemple, youtube est classé comme flux audio / vidéo, c’est pourquoi youtube est bloqué à certains endroits, notamment dans les écoles. Si vous souhaitez éviter les mandataires, extraire les données d’un site Web et les placer dans votre propre site Web, comme un site Web com qui peut l’être enregistré. Lorsque vous créez et enregistrez un site Web, définissez-le comme tout ce que vous voulez.