rastreador multithread enquanto estiver usando o proxy tor
Estou tentando criar um rastreador multiencadeado que usa proxies tor: Estou usando o seguinte para estabelecer a conexão tor:
from stem import Signal
from stem.control import Controller
controller = Controller.from_port(port=9151)
def connectTor():
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
def renew_tor():
global request_headers
request_headers = {
"Accept-Language": "en-US,en;q=0.5",
"User-Agent": random.choice(BROWSERS),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Referer": "http://thewebsite2.com",
"Connection": "close"
}
controller.authenticate()
controller.signal(Signal.NEWNYM)
Aqui está o buscador de URL:
def get_soup(url):
while True:
try:
connectTor()
r = requests.Session()
response = r.get(url, headers=request_headers)
the_page = response.content.decode('utf-8',errors='ignore')
the_soup = BeautifulSoup(the_page, 'html.parser')
if "captcha" in the_page.lower():
print("flag condition matched while url: ", url)
#print(the_page)
renew_tor()
else:
return the_soup
break
except Exception as e:
print ("Error while URL :", url, str(e))
Em seguida, estou criando um trabalho de busca multithread:
with futures.ThreadPoolExecutor(200) as executor:
for url in zurls:
future = executor.submit(fetchjob,url)
estou recebendo o seguinte erro, que não vejo quando uso o multiprocessamento:
Socket connection failed (Socket error: 0x01: General SOCKS server failure)
Eu apreciaria Qualquer conselho para evitar erro de meias e melhorar o desempenho do método de rastreamento para torná-lo multi-thread.