CoderCastrov logo
CoderCastrov
Парсер веб-страниц

Как создать парсер веб-страниц с помощью RStudio

Как создать парсер веб-страниц с помощью RStudio
просмотров
3 мин чтение
#Парсер веб-страниц
Table Of Content

    Привет! Сегодня мы поговорим о парсинге веб-страниц, ура!

    Понятие парсинга веб-страниц наверняка знакомо нам всем. Парсинг - это техника сбора или извлечения данных с веб-страницы и их сохранение в определенном формате для дальнейшего использования. Таким образом, парсинг веб-страниц позволяет извлекать необходимые данные для их анализа и исследования в определенных целях.

    Парсинг веб-страниц можно выполнять разными способами, как вручную, так и с использованием программ и языков программирования. Ручной способ заключается в копировании данных с веб-страницы, что достаточно удобно, но требует много времени и усилий. Однако, если использовать программное обеспечение или язык программирования, данные можно быстро извлечь и обработать по мере необходимости. Существует множество программ и языков программирования, которые можно использовать для парсинга веб-страниц, таких как JavaScript, Python, RStudio и другие.

    Сегодня мы попробуем создать парсер веб-страниц с использованием программного обеспечения RStudio. Мы можем использовать данные с любого веб-сайта, но в данном случае я использовал Internet Movie Database (IMDb). Мы хотим увидеть различия в 100 фильмах, представленных по популярности за год, и взять данные за период с 2015 по 2019 год.

    Для 2015 года мы можем получить данные с веб-сайта IMDb, перейдя по ссылке ссылка. Мы увидим веб-страницу следующего вида:

    IMDb

    Мы видим список фильмов, включающий информацию, такую как название фильма, год выпуска, продолжительность, жанр, рейтинг, описание и кассовые сборы. Из этих данных мы будем извлекать несколько необходимых данных, таких как кассовые сборы, продолжительность и жанр. Мы можем получить данные с веб-страницы, используя несколько пакетов RStudio, такие как rvest и xml2.

    Сначала установим необходимые пакеты:

    install.packages("xml2")
    install.packages("rvest")
    library(xml2)
    library(rvest)

    Затем введем веб-адрес, с которого мы будем получать данные. В данном случае:

    web_address <- 'https://www.imdb.com/search/title/?count=100&release_date=2015,2015&title_type=feature'
    web_page <- read_html(web_address)
    web_page

    Далее мы начнем парсить данные, начиная с извлечения данных о продолжительности:

    runtime_data_html <- html_nodes(web_page, '.runtime')
    runtime_data <- html_text(runtime_data_html)
    head(runtime_data)

    Затем преобразуем данные в числовой формат:

    runtime_data <- gsub(" min", "", runtime_data)
    runtime_data <- as.numeric(runtime_data)
    runtime_data

    Таким образом, мы получим 100 верхних данных о продолжительности. Затем мы извлечем данные о жанре:

    genre_data_html <- html_nodes(web_page, '.genre')
    genre_data <- html_text(genre_data_html)
    genre_data <- gsub("\n", "", genre_data)
    genre_data <- gsub(" ", "", genre_data)
    genre_data <- gsub(",.*", "", genre_data)
    genre_data <- as.factor(genre_data)
    genre_data

    Затем мы извлечем данные о рейтинге фильма:

    rating_data_html <- html_nodes(web_page, '.ratings-imdb-rating strong')
    rating_data <- html_text(rating_data_html)
    rating_data <- as.numeric(rating_data)
    rating_data

    Далее мы извлечем данные о кассовых сборах:

    gross_data_html <- html_nodes(web_page, '.ghost~ .text-muted+ span')
    gross_data <- html_text(gross_data_html)
    gross_data <- gsub("M", "", gross_data)
    gross_data <- substring(gross_data, 2, 6)
    gross_data

    Так как некоторые данные о кассовых сборах отсутствуют, мы заменим их значения на NA:

    for (i in c(3,14,35,47,49,63,68,72,76,85,94,95)){
      a <- gross_data[1:(i-1)]
      b <- gross_data[i:length(gross_data)]
      gross_data <- append(a, list("NA"))
      gross_data <- append(gross_data, b)
    }

    Затем преобразуем данные о кассовых сборах в числовой формат:

    gross_data <- as.numeric(unlist(gross_data))
    gross_data_new <- gross_data[1:100]
    summary(gross_data_new)

    После того, как мы получили все необходимые данные, такие как продолжительность, рейтинг, жанр и кассовые сборы, создадим из них фрейм данных:

    film_data <- data.frame(Runtime = runtime_data, Genre = genre_data, Rating = rating_data, Gross_Revenue = gross_data_new)
    str(film_data)

    После получения всех необходимых данных мы можем визуализировать их с помощью графиков, используя столбчатую диаграмму или точечную диаграмму. Давайте посмотрим на графики для каждого года:

    2015:

    library(ggplot2)
    qplot(data = film_data, Runtime, fill = Genre, bins = 30)

    2016:

    ggplot(film_data, aes(x = Runtime, y = Gross_Revenue)) + geom_point(aes(size = Rating, col = Genre))

    2017:

    ggplot(film_data, aes(x = Runtime, y = Gross_Revenue)) + geom_point(aes(size = Rating, col = Genre))

    2018:

    ggplot(film_data, aes(x = Runtime, y = Gross_Revenue)) + geom_point(aes(size = Rating, col = Genre))

    2019:

    ggplot(film_data, aes(x = Runtime, y = Gross_Revenue)) + geom_point(aes(size = Rating, col = Genre))

    После визуализации данных с помощью столбчатой диаграммы мы можем увидеть, что с годами наиболее популярными жанрами фильмов являются фильмы боевиков. Таким образом, если вы хотите создать фильм, который будет популярен среди зрителей, выберите жанр боевика в качестве основного.

    Это все для сегодняшнего урока! Надеюсь, что он был полезным для вас! ^^

    Ссылка на оригинал: https://medium.com/@986110101/web-scraping-dengan-r-53d07fb81fc9