質問

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

役に立ちましたか?

解決

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

  

urlopen()関数は機能します   透過的にプロキシを使用して   認証を必要としません。 Unixで   またはWindows環境では、   http_proxy、ftp_proxy、gopher_proxy   環境変数をURLに   前にプロキシサーバーを識別します   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()

他のヒント

通常、プロキシは、Webサイトの作成方法に基づいてWebサイトをカテゴリ別にフィルタリングします。カテゴリに基づくプロキシを介してデータを送信することは困難です。たとえば、youtubeはオーディオ/ビデオストリームとして分類されているため、特に学校ではYouTubeが一部の場所でブロックされています。 プロキシをバイパスしてWebサイトからデータを取得し、それを登録できるドットコムWebサイトのような独自の本物のWebサイトに配置する場合。 Webサイトを作成および登録するときに、Webサイトを必要に応じて分類します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top