es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que el Web Scraping sea más rápido?

Hice este código para extraer letras de una página web, informando el artista y el nombre de la música.

El código funciona, el problema es que tengo un DataFrame (llamado years19202020) con 10000 músicas, y tardó 1:30h en recuperar todas estas letras.

¿Hay alguna manera de hacerlo más rápido?

def url_lyric(music, artist):
 url_list = ("https://www.letras.mus.br/", str(artist), "/", str(music), "/")
 url = ''.join(url_list)
 req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
 try:
   webpage = urlopen(req).read()
   bs = BeautifulSoup(webpage, 'html.parser')
   lines =bs.find('div', {'class':'cnt-letra p402premium'})
   final_lines = lines.findAll('p')
   return final_lines
 except:
     return 0

final_lyric_series = pd.Series(name = "lyrics")

for year in range (1920,2021):
  lyrics_serie = lyrics_from_year(year)
  final_lyric_series = pd.concat([final_lyric_series, lyrics_serie])
  print(year)

La función lyrics_from_year(year) utiliza la función url_lyric, realiza algunas tareas de re y devuelve una pd.series con todas las letras del año elegido.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunas maneras de potencialmente acelerar el proceso de web-scraping:

    1. Usar multiprocessing para ejecutar múltiples solicitudes simultáneamente. Esto permitirá que el programa recupere letras para múltiples canciones al mismo tiempo, lo que potencialmente reducirá el tiempo total que lleva recopilar todas las letras.

    2. Implementar el almacenamiento en caché para evitar volver a solicitar las mismas letras varias veces. Esto permitirá que el programa recupere letras que ya han sido recopiladas de una caché local en lugar de hacer una solicitud web cada vez.

    3. Usar un sitio web o API diferente que proporcione letras de manera más eficiente. Algunos sitios web pueden ofrecer API que permitan solicitudes de letras a granel o pueden proporcionar letras en un formato más estructurado que se pueda analizar más fácilmente.

    4. Optimizar el propio código. Puede haber áreas del código que se puedan optimizar aún más para mejorar la velocidad, como el uso de estructuras de datos o algoritmos más eficientes. El perfilado del código puede ayudar a identificar estas áreas.

Comments are closed.