1


6

単にurllibを使用する代わりに、誰もがHTTPプロキシを介して動作することができるURLの高速のマルチスレッドダウンロードのための最も効率的なパッケージを知っていますか? Twisted、Scrapy、libcurlなどいくつか知っています。 しかし、私は彼らが決定を下すために、あるいは彼らがプロキシーを使うことができるとしてもそれらについて十分に知りません。 誰かが私の目的に最も適したものを知っていますか ありがとうございます。

2 Answer


17


Pythonでこれを実装するのは簡単です。

_ urlopen()関数は、認証を必要としないプロキシで透過的に機能します。 UnixまたはWindows環境では、http_proxy、ftp_proxy、またはgopher_proxy環境変数を、Pythonインタープリターを開始する前にプロキシサーバーを識別するURLに設定します。 _

# -*- 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()


1


通常、プロキシはWebサイトの作成方法に基づいてWebサイトをカテゴリ別にフィルタ処理します。 カテゴリに基づいたプロキシを介してデータを送信することは困難です。 例えば、youtubeはオーディオ/ビデオストリームとして分類されているため、youtubeは特に学校ではブロックされている場所があります。 あなたがプロキシを迂回してウェブサイトからデータを取得し、あなたにそれを登録することができるドットコムのウェブサイトのようなあなた自身の本物のウェブサイトに入れることを望むなら。 あなたがウェブサイトを作って登録しているとき、あなたのウェブサイトをあなたが望むものに分類してください。