Pergunta

Em vez de apenas usar urllib Alguém sabe do pacote mais eficiente para rápido, multithreaded download de URLs que podem operar através de HTTP proxies? Sei de alguns, como Torcido, Scrapy, libcurl etc, mas eu não sei o suficiente sobre eles para tomar uma decisão ou mesmo se eles podem usar proxies .. Alguém sabe do melhor para os meus propósitos? Obrigado!

Foi útil?

Solução

é de simples de implementar isso em python.

Os urlopen () funciona de função transparente com proxies que fazer não requer autenticação. Em um Unix ou ambiente Windows, definir o http_proxy, ftp_proxy ou gopher_proxy variáveis ??de ambiente para uma URL que Identifica o servidor proxy antes disparar o interpretador 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()

Outras dicas

normalmente proxies sites de filtro categoricamente com base em como o site foi criado. É difícil dados de transmissão através de proxies com base em categorias. Por exemplo youtube é classificado como de áudio / vídeo córregos, portanto, youtube está bloqueado em alguns lugares espically escolas. Se você quiser proxies de bypass e obter os dados de um site e colocá-lo em seu próprio site genuíno como um site pontocom que pode ser registrado para você. Quando você está fazendo e registrar o site categorizar seu site o que quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top