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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top