【发布时间】:2019-06-24 09:16:11
【问题描述】:
我尝试使用 TOR 代理进行抓取,并且在一个线程中一切正常,但这很慢。 我尝试做一些简单的事情:
def get_new_ip():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)
time.sleep(controller.get_newnym_wait())
def check_ip():
get_new_ip()
session = requests.session()
session.proxies = {'http': 'socks5h://localhost:9050', 'https': 'socks5h://localhost:9050'}
r = session.get('http://httpbin.org/ip')
r.text
with Pool(processes=3) as pool:
for _ in range(9):
pool.apply_async(check_ip)
pool.close()
pool.join()
当我运行它时,我看到了输出:
{"origin": "95.179.181.1, 95.179.181.1"}
{"origin": "95.179.181.1, 95.179.181.1"}
{"origin": "95.179.181.1, 95.179.181.1"}
{"origin": "151.80.53.232, 151.80.53.232"}
{"origin": "151.80.53.232, 151.80.53.232"}
{"origin": "151.80.53.232, 151.80.53.232"}
{"origin": "145.239.169.47, 145.239.169.47"}
{"origin": "145.239.169.47, 145.239.169.47"}
{"origin": "145.239.169.47, 145.239.169.47"}
为什么会发生这种情况?如何为每个线程分配自己的 IP? 顺便说一下,我尝试了 TorRequests、TorCtl 之类的库,结果是一样的。
我知道TOR在发布新IP之前似乎有延迟,但是为什么同一个IP会进入不同的进程?
【问题讨论】:
-
尝试在调用`get_new_ip()后添加
time.sleep(1) -
@SebastienD 尝试过 - 没有帮助
标签: python-3.x python-requests multiprocessing python-asyncio tor