プロキシとマルチスレッドの使用方法を理解しようとしています。
このコードは機能します:
requester = urllib3.PoolManager(maxsize = 10, headers = self.headers)
thread_pool = workerpool.WorkerPool()
thread_pool.map(grab_wrapper, [item['link'] for item in products])
thread_pool.shutdown()
thread_pool.wait()
次にgrab_wrapper
requested_page = requester.request('GET', url, assert_same_host = False, headers = self.headers)
ヘッダーは、Accept、Accept-Charset、Accept-Encoding、Accept-Language、および User-Agent で構成されます
ただし、これは本番環境では機能しません。プロキシを通過する必要があるため、承認は必要ありません。
さまざまなことを試しました(proxies
リクエストへの受け渡し、ヘッダーなど)。機能する唯一のものはこれです:
requester = urllib3.proxy_from_url(self._PROXY_URL, maxsize = 7, headers = self.headers)
thread_pool = workerpool.WorkerPool(size = 10)
thread_pool.map(grab_wrapper, [item['link'] for item in products])
thread_pool.shutdown()
thread_pool.wait()
ここで、プログラムを実行すると、10 個のリクエスト (10 スレッド) が行われ、停止します。エラーも警告もありません。proxy_from_url
これがプロキシをバイパスできる唯一の方法ですが、WorkerPool
一緒に使用することはできないようです。
これら 2 つを組み合わせて作業コードにする方法はありますか? 時間の関係でスクラップなどに書き換えるのは避けたいです。
よろしく