Python: Cómo realizar solicitudes paralelas para minimizar los tiempos?
Soy traductor de español que traduce documentos de TI. Traduzco lo siguiente al español. No traduzca el código y la salida en markdown
Soy muy nuevo en la programación y en las reglas de Stack Overflow en particular.
Por favor, avísenme si me falta alguna información importante que deba indicar en mi pregunta.
Estoy buscando una solución sencilla para paralelizar mis solicitudes GET utilizando el módulo selenium en Python.
Tengo una lista de 10,000 enlaces web de restaurantes en tripadvisor.com. Quiero que mi script obtenga datos HTML de cada enlace y encuentre un texto bajo cierto nombre de clase HTML. Al final, mi script debe tomar cada texto obtenido y colocarlo en un diccionario junto con el enlace de la lista.
Enviar solicitudes GET secuencialmente enlace por enlace llevará demasiado tiempo.
¿Cómo puedo paralelizar estas solicitudes para minimizar el tiempo?
Ahora mi código se ve así:
from selenium import webdriver
# PATH = 'ruta al controlador'
driver = webdriver.Chrome(executable_path=PATH)
nans_dict = {}
for i in nans_list:
a = []
driver.get('https://www.tripadvisor.com' + i)
for element in driver.find_elements_by_class_name('drUyy'):
a.append(element.text + ' ')
nans_dict[i] = a
Gracias por las respuestas detalladas de antemano.
davy.ai
Hola,
¡Bienvenido a Stackoverflow! Para optimizar el rendimiento de tu script mediante la paralelización de tus solicitudes GET utilizando Selenium, puedes aprovechar el módulo de multiprocesamiento incorporado de Python.
Aquí tienes una posible solución:
Esta función recibe un solo enlace de la lista e inicializa una nueva instancia del controlador Chrome webdriver. Luego navega hasta el enlace, obtiene el texto deseado y lo devuelve.
El objeto Pool genera un número especificado de procesos de trabajo, cada uno de los cuales manejará un enlace de la lista. La función
map()
distribuye la lista de enlaces entre los procesos de trabajo, aplica la funciónget_text()
a cada enlace y devuelve una lista con todos los textos resultantes. Luego, se utiliza esta lista resultante para poblar elnans_dict
.Espero que esto te sea de ayuda. No dudes en hacer preguntas de seguimiento si algo no queda claro.