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
}
最後に、私はここで新人です。私の質問の説明が明確でない場合は、それを指摘してください。すぐに修正します。ありがとう、私はあらゆる援助に感謝します。
これは広すぎます。あなたの正確な問題は何ですか?この範囲で有効であると考えられる多くの回答がある場合、あなたは何かをする一般的な方法を求めているようです。 –
アドバイスありがとう、私はそれを修正します – user6847893