Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
¿Cómo decirle a Python que continúe extrayendo incluso si no se alcanza la cantidad de revisiones?

Para un proyecto, estoy extrayendo reseñas de hoteles usando python. Tengo una lista de más de 100 hoteles y estoy extrayendo 1.500 reseñas de cada uno. El problema es que algunos de los hoteles no tienen tantas reseñas. Lo que pasa es que cuando no se llega a 1.500 el bucle se para y da error.

Aquí está mi código:

 # The number of reviews to obtain per hotel reviewsToGet = 1500 # Loop for all hotels for index, row in hotelsToScrap.iterrows(): # Present feedback on which hotel is being processed print("Processing hotel", index) # Reset counter per hotel reviewsExtracted = 0 # Loop until it extracts the pre-defined number of reviews while reviewsExtracted<reviewsToGet: # Define URL to use based on the number of reviews extracted so far urlToUse = row['URL'] if reviewsExtracted>0: repText = "-Reviews-or"+str(reviewsExtracted)+"-" urlToUse = urlToUse.replace("-Reviews-",repText) # Open and read the web page content soup = openPageReadHTML(urlToUse) # Process web page hotelReviews = processPage(soup, index, hotelReviews) # Update counter reviewsExtracted = reviewsExtracted + 5 # Present feedback on the number of extracted reviews print("Extracted ",reviewsExtracted,"/",reviewsToGet) # Save the extracted reviews data frame to an Excel file hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")

¿Qué hago para que arranque la extracción aunque no llegue a los 1.500?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Es difícil saberlo sin conocer el error exacto, pero supongo que cuando la condición del bucle while es verdadera, es cuando reviewsExtracted es menor que reviewsToGet y en realidad no hay más revisiones, parte de su código todavía está tratando de extraer revisiones, pero ¡En realidad no hay más reseñas! Aquí:

 repText = "-Reviews-or"+str(reviewsExtracted)+"-" urlToUse = urlToUse.replace("-Reviews-",repText)

Simplemente configura la nueva URL urlToUse usando el valor reviewsExtracted , que probablemente no esté en el sitio web.

Por lo tanto, agregaría una condición más para verificar primero si hay revisiones para extraer antes de extraer, o usar try y except para detectar el error exacto, creo que sucede en esta línea:

 soup = openPageReadHTML(urlToUse)
over 4 years ago · Santiago Trujillo Relatório

0

De su publicación, supongo que el número 1500 es un techo , por ejemplo. "Esta es la cantidad máxima de reseñas que quiero obtener para cada hotel. Si un hotel tiene menos de 1500 reseñas, obtenga todas y continúe".

Sugeriría cambiar su enfoque de confiar en las 1500 reseñas máximas como condición para usarlo como una señal que indica cuándo detenerse y pasar al siguiente hotel.

Sin embargo, si solo desea que su implementación actual se ejecute, haga lo que han dicho varios de los otros comentaristas: implemente el manejo de excepciones para que su proceso pueda continuar cuando encuentre un error.

Ejemplo, usando su código:

 reviewsToGet = 1500 # Loop for all hotels for index, row in hotelsToScrap.iterrows(): print("Processing hotel", index) reviewsExtracted = 0 try: # Loop until it extracts the pre-defined number of reviews while reviewsExtracted<reviewsToGet: # Define URL to use based on the number of reviews extracted so far urlToUse = row['URL'] if reviewsExtracted>0: repText = "-Reviews-or"+str(reviewsExtracted)+"-" urlToUse = urlToUse.replace("-Reviews-",repText) # Open and read the web page content soup = openPageReadHTML(urlToUse) # Process web page hotelReviews = processPage(soup, index, hotelReviews) # Update counter reviewsExtracted = reviewsExtracted + 5 # Present feedback on the number of extracted reviews print("Extracted ",reviewsExtracted,"/",reviewsToGet) except Exception as err: print("[+] Exception encountered! Most likely because hotel has too few reviews, but check stack trace. Continuing anyways.") pass # Save the extracted reviews data frame to an Excel file hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")
over 4 years ago · Santiago Trujillo Relatório

0

El enfoque más simple sería realizar un while dentro de un bloque try-except{} de la siguiente manera:

 # The number of reviews to obtain per hotel reviewsToGet = 1500 # Loop for all hotels for index, row in hotelsToScrap.iterrows(): # Present feedback on which hotel is being processed print("Processing hotel", index) # Reset counter per hotel reviewsExtracted = 0 # Loop until it extracts the pre-defined number of reviews while reviewsExtracted<reviewsToGet: try: # Define URL to use based on the number of reviews extracted so far urlToUse = row['URL'] if reviewsExtracted>0: repText = "-Reviews-or"+str(reviewsExtracted)+"-" urlToUse = urlToUse.replace("-Reviews-",repText) # Open and read the web page content soup = openPageReadHTML(urlToUse) # Process web page hotelReviews = processPage(soup, index, hotelReviews) # Update counter reviewsExtracted = reviewsExtracted + 5 # Present feedback on the number of extracted reviews print("Extracted ",reviewsExtracted,"/",reviewsToGet) except: continue # Save the extracted reviews data frame to an Excel file hotelReviews.to_excel("ExtractedReviewsComplete.xlsx")

PD: en lugar de capturar la excepción sin procesar, debe capturar solo las excepciones requeridas que desea evitar.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda