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 extraer sinopsis de IMDb en español?

Estoy tratando de extraer el título y la sinopsis de una película en español. Aunque ambos se muestran en español en el sitio web, después de extraer la página utilizando BeautifulSoup, obtengo el título en español pero la descripción de la película en inglés. Sé que existe una forma de usar Accept-Language para las cabeceras con el fin de poder cambiar el idioma, pero no conozco algo similar para el cuerpo.

Mi código es

from bs4 import BeautifulSoup
import requests

website = 'https://www.imdb.com/title/tt0038650/?ref=fn_al_tt1'
result = requests.get(website)
content = result.text
soup = BeautifulSoup(content, 'lxml')

box = soup.find('section', class_='ipc-page-section ipc-page-section--baseAlt ipc-page-section--tp-xs ipc-page-section--bp-xs HeroHeroParent-kvkd64-1 fARFJI')
title = box.find('h1', class_='TitleHeaderTitleText-sc-1wu6n3d-0 dxSWFG').get_text()
synopsis = box.find('span', class_='GenresAndPlot_TextContainerBreakpointXL-cum89p-2 gCtawA').get_text()
print(title)
print(synopsis)

Y la salida es

¡Qué bello es vivir!
Un ángel es enviado desde el cielo para ayudar a un empresario desesperadamente frustrado mostrándole cómo hubiera sido la vida si nunca hubiera existido.
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el sitio web está proporcionando automáticamente la versión en inglés de la sinopsis, a pesar de que el sitio web está en español. Una posible solución sería cambiar manualmente el idioma del sitio web a español y luego extraer los datos. Esto se puede hacer agregando el encabezado Accept-Language a la solicitud.

    Aquí te explico cómo hacerlo:

    from bs4 import BeautifulSoup
    import requests
    
    headers = {
        'Accept-Language': 'es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3'
    }
    
    sitio_web = 'https://www.imdb.com/title/tt0038650/?ref_=fn_al_tt_1'
    resultado = requests.get(sitio_web, headers=headers)
    contenido = resultado.text
    sopa = BeautifulSoup(contenido, 'lxml')
    
    caja = sopa.find('section', class_='ipc-page-section ipc-page-section--baseAlt ipc-page-section--tp-xs ipc-page-section--bp-xs Hero__HeroParent-kvkd64-1 fARFJI')
    titulo = caja.find('h1', class_='TitleHeader__TitleText-sc-1wu6n3d-0 dxSWFG').get_text()
    sinopsis = caja.find('span', class_='GenresAndPlot__TextContainerBreakpointXL-cum89p-2 gCtawA').get_text()
    print(titulo)
    print(sinopsis)
    

    Al incluir el encabezado ‘Accept-Language’ en la solicitud, le estamos indicando al servidor que preferimos contenido en español. El servidor intentará enviarnos la versión en español de la página web, incluyendo la sinopsis en español que queremos extraer.

    ¡Inténtalo y comprueba si funciona para ti!

Comments are closed.