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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top