Как создать парсер веб-страниц с помощью RStudio
Table Of Content
Привет! Сегодня мы поговорим о парсинге веб-страниц, ура!
Понятие парсинга веб-страниц наверняка знакомо нам всем. Парсинг - это техника сбора или извлечения данных с веб-страницы и их сохранение в определенном формате для дальнейшего использования. Таким образом, парсинг веб-страниц позволяет извлекать необходимые данные для их анализа и исследования в определенных целях.
Парсинг веб-страниц можно выполнять разными способами, как вручную, так и с использованием программ и языков программирования. Ручной способ заключается в копировании данных с веб-страницы, что достаточно удобно, но требует много времени и усилий. Однако, если использовать программное обеспечение или язык программирования, данные можно быстро извлечь и обработать по мере необходимости. Существует множество программ и языков программирования, которые можно использовать для парсинга веб-страниц, таких как JavaScript, Python, RStudio и другие.
Сегодня мы попробуем создать парсер веб-страниц с использованием программного обеспечения RStudio. Мы можем использовать данные с любого веб-сайта, но в данном случае я использовал Internet Movie Database (IMDb). Мы хотим увидеть различия в 100 фильмах, представленных по популярности за год, и взять данные за период с 2015 по 2019 год.
Для 2015 года мы можем получить данные с веб-сайта 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