¿Paquete de Python para araña multiproceso con soporte de proxy?
-
06-07-2019 - |
Pregunta
En lugar de simplemente usar urllib, ¿alguien conoce el paquete más eficiente para la descarga rápida y multiproceso de URL que pueden operar a través de servidores proxy http? Conozco algunos como Twisted, Scrapy, libcurl, etc., pero no sé lo suficiente sobre ellos para tomar una decisión o incluso si pueden usar proxies. ¿Alguien sabe cuál es el mejor para mis propósitos? Gracias!
Solución
es simple implementar esto en Python.
La función urlopen () funciona transparente con proxies que hacen No requiere autenticación. En un unix o entorno de Windows, configure el http_proxy, ftp_proxy o gopher_proxy variables de entorno a una URL que identifica el servidor proxy antes iniciar el intérprete de 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()
Otros consejos
generalmente los servidores proxy filtran los sitios web de forma categórica en función de cómo se creó el sitio web. Es difícil transmitir datos a través de servidores proxy basados ??en categorías. Por ejemplo, YouTube está clasificado como transmisiones de audio / video, por lo tanto, YouTube está bloqueado en algunos lugares, especialmente en las escuelas. Si desea omitir los proxys y obtener los datos de un sitio web y ponerlos en su propio sitio web genuino, como un sitio web de punto com que se lo puede registrar. Cuando crea y registra el sitio web, clasifique su sitio web como lo desee.