2016-09-19 10 views
0

Scrappyを使用して、多数のWebページをクロールしたいと考えています。私はプロキシを使用しなければならず、プロキシが悪いので、IPの変更に多くの時間が浪費されます。マルチスレッドを使用してこれを高速化するにはどうすればよいですか?多数のWebページをクロールする

(Psは:。。。私はRedisのデータベースからproxyIPを取得するためにHttpProxyMiddleware.pyを使用

proxy_config = settings.get("PROXY_CONFIG") 
    self.r =redis.Redis(host=proxy_config.get('redis_host'), 
    port=proxy_config.get("redis_port", 6379)) 
    self.ips_key = proxy_config.get('ip_key') 

そこでのIPSの多くがあるが、それらの一部が動作しない、私は= 5秒のタイムアウトを設定します、scrapyが使用ねじれているので、その作業の流れは
spider.py(リクエストを生成する)であるIPSは多くの時間を無駄に変えるたくさんの操作をして

- > HttpProxyMiddleware.py(参照する応答をチェックし、要求するプロキシを追加します。 ipが動作している場合) - > spider.py(解析応答(解析))

まず、私はこれをスピードアップするためにマルチスレッドを使用しようとします。その結果、すべてのスレッドは、カスタマイズされた同じミドルウェア "HttpProxyMiddleware.py"に依存していることがわかります。私が知っているように、これは単なるクラスであり、シングルトンではありません。私はそれを実装するためにどのような治療法はありません。私はHttpProxyMiddleware1.py HttpProxyMiddleware2.pyとして複数のHttpProxyMiddlewareを作成しなければなりません......また、spider1.py、spider2.pyとしてmutilple spider.pyを作成します......各スパイダーは対応して1つのHttpProxyMiddlewareを使用します。そしてそれは働く。悪く見える。私は助けのためにGoogleに尋ねる、私は答えが使用するリアクター(ツイスト)です、私はそれを使用した:

from twisted.internet import reactor 
    reactor.suggestThreadPoolSize(30) 

しかし、それは動作しません。たぶん私の使い方が間違っています。だから私の質問はどのように一緒に高速化するために原子炉または他のマルチスレッドメソッドを使用するか?

HttpProxyMiddleware.py extends scrapy's downloadmiddleware 
    class HttpProxyMiddleware(object):{ 
    def process_request(self, request, spider): 
     #add proxy to request 

    def process_response(self, request, response, spider): 
     #check response to decide to change ips or not  
    } 

最後に、私はここで新人です。私の質問の説明が明確でない場合は、それを指摘してください。すぐに修正します。ありがとう、私はあらゆる援助に感謝します。

+3

これは広すぎます。あなたの正確な問題は何ですか?この範囲で有効であると考えられる多くの回答がある場合、あなたは何かをする一般的な方法を求めているようです。 –

+0

アドバイスありがとう、私はそれを修正します – user6847893

答えて

0

多くのプロキシを使用します。

たとえば、同様のプロジェクトでは、私はtorをインストールしました。

torの複数のインスタンスを実行できます。したがって、複数の専用プロキシを使用できます。

インスタンスを127.0.0.1:9050で実行し、別のインスタンスを127.0.0.1:9051で実行します。以下同様です。

これらすべてのインスタンスの起動をスクリプト化し、再起動もスクリプト化します(別の終了ノード、つまり別のIPが得られるように)。この時

# pseudo code 
while 1: 
    tor_restart.sh # restart all tor nodes 
    for i between 0 and n: 
     python scrapy_script.py 9050+i & 
    while there is a scrapy_script.py in the process list, sleep. 

ルック:

https://tor.stackexchange.com/questions/327/how-may-i-run-multiple-tor-relay-instances-in-a-single-linux-machine

は今、あなたのscrapyスクリプトがパラメータ(argv

としてプロキシアドレスを取るなどとてもコントローラスクリプト実行中のすべてのものを持ってい

関連する問題