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.

Elige el idioma de los resultados de texto al hacer scraping con rvest (ejemplo de IMDB).

Estoy tratando de hacer web scraping de IMDB con rvest, y a menudo encuentro un problema con la salida del lenguaje, probablemente debido a mi ubicación en Japón.

Por ejemplo, al intentar extraer los títulos de las películas de esta página:

https://www.imdb.com/chart/top/?ref_=nv_mv_250

con el siguiente código:

library(rvest)
library(tidyverse)    
url <- "https://www.imdb.com/chart/top/?ref_=nv_mv_250"

read_html(url) %>%
    html_nodes(".titleColumn a") %>%
    html_text() %>%
    tibble(title = .) %>%
    head()

El resultado es una mezcla de títulos en inglés y en japonés romanizados:

title                 
<chr>                 
1 Shōshanku no sora ni  
2 Goddofāzā             
3 The Godfather: Part II
4 Dāku naito            
5 12 Angry Men          
6 Schindler's List

Esto ocurre a pesar de que el texto en mi pantalla, e incluso al inspeccionar los elementos con las herramientas de desarrollo de Chrome, están en inglés.

Supongo que el problema es similar al que se publicó en SO aquí con referencia a hacer web scraping usando PHP.

¿Existe alguna forma de solicitar la salida en inglés, preferiblemente en una cadena de procesamiento compatible con tidyverse?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución para el problema de la salida de lenguaje mixto al realizar webscraping en IMDB con rvest es establecer la preferencia de idioma en los encabezados de la solicitud. Esto se puede hacer utilizando el paquete httr, que se puede integrar en el flujo de trabajo de rvest.

    Aquí tienes un ejemplo de cómo modificar el código existente para incluir el paquete httr y establecer el encabezado de idioma en inglés:

    “`{R}
    library(rvest)
    library(tidyverse)
    library(httr)

    url <- “https://www.imdb.com/chart/top/?ref_=nv_mv_250”

    headers <- c(
    User-Agent = “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36”,
    Accept-Language = “en-US,en;q=0.9”
    )

    read_html(httr::GET(url, add_headers(headers))) %>%
    html_nodes(“.titleColumn a”) %>%
    html_text() %>%
    tibble(title = .) %>%
    head()
    “`

    En este ejemplo, primero definimos los encabezados que queremos utilizar, incluyendo User-Agent para identificar el tipo de navegador y Accept-Language para especificar el idioma preferido. Luego, usamos la función httr::GET() para realizar la solicitud y agregar los encabezados. Finalmente, continuamos con el flujo de trabajo de rvest como antes.

    Esto debería dar como resultado que los títulos de las películas obtenidos sean todos en inglés.

Comments are closed.