Парсинг веб-страниц с использованием R
Table Of Content
- О данных
- The Numbers - Бюджеты фильмов, Самые дорогие фильмы, Самые прибыльные фильмы, Самые убыточные...
- Примечание: Числа бюджетов фильмов могут быть сложными для поиска и ненадежными. Киностудии часто пытаются скрыть информацию...
- Следуйте следующим шагам:
- Установка пакетов
- Перед началом работы
- Учебник по reticulate: как использовать Python в R - Ander Fernández
- Python и R - два основных языка программирования для работы с данными. Оба являются замечательными и универсальными...
- Установите модуль, который позволяет работать с r и python одновременно
- ! pip install rpy2
- Приступим.
- Начало работы
- The Numbers - Бюджеты фильмов
- Примечание: Числа бюджета для фильмов могут быть как сложно найти, так и ненадежными. Киностудии и режиссеры часто пытаются сохранить...
- 4 Форматирование в стиле C | Обработка строк с помощью R
- Эта книга стремится предоставить панорамный обзор широкого спектра операций с строками, которые можно выполнить с помощью...
- создание двух пустых фреймов данных
- итератор
- он выполняет цикл 5501 раз, чтобы извлечь, сохранить и объединить около 5000 уже извлеченных фильмов.
- Заключение
- Никогда не сдавайся!
- Оскар Рохо Мартин - изучение науки о данных в Университете Деусто - Сан-Себастьян, Баскская страна, Испания | LinkedIn
- Ссылки:
Ожидая, что у вас уже есть базовое представление о том, как работает R и его синтаксис, давайте сразу перейдем к этому небольшому учебнику, в котором я покажу вам, как с помощью R собирать данные с нескольких страниц одновременно.
О данных
На сайте The Numbers находится полный список фильмов с информацией о датах выпуска, бюджете производства и доходе. Цифры прибыли и убытков являются очень грубыми оценками на основе доходов от кассовых сборов внутри страны и за рубежом, а также от продажи видео внутри страны, экстраполированными для оценки мирового дохода студии после вычета розничных затрат.
The Numbers - Бюджеты фильмов, Самые дорогие фильмы, Самые прибыльные фильмы, Самые убыточные...
Примечание: Числа бюджетов фильмов могут быть сложными для поиска и ненадежными. Киностудии часто пытаются скрыть информацию...
Примечание: Данные о фильмах представлены в табличном формате.
Следуйте следующим шагам:
* Откройте R Studio. Затем в новом файле:
Установка пакетов
Установите необходимые пакеты.
* xml2: Xml2 - это оболочка для обширной библиотеки C libxml2, которая упрощает работу с XML и HTML в R.
* rvest: rvest помогает скрапить информацию со веб-страниц.
* tibble: Пакет tibble предоставляет утилиты для работы с tibbles, где "tibble" - это разговорное название класса S3 tbl_df. Класс tbl_df - это особый случай базового data.frame.
Перед началом работы
Как программировать на Python и R в одном блокноте Jupyter
Вы должны понимать, что R и Python хранят переменные в разных структурах. Поэтому, если мы хотим использовать оба языка, нам нужен пакет, который будет служить переводчиком, то есть "преобразует" список Python в R-вектор, чтобы работать с ним, например.
Учебник по reticulate: как использовать Python в R - Ander Fernández
Python и R - два основных языка программирования для работы с данными. Оба являются замечательными и универсальными...
anderfernandez.com
Для этого мы будем использовать пакет rpy. Этот пакет создает интерфейс Python для работы с R. Другой вариант - использовать пакет reticulate, который, по сути, является обратным: интерфейсом R для Python, в случае, если вы предпочитаете программировать в RStudio, я оставляю вам этот пост, где я объясняю это ;) Установка пакета rpy
Первое, что вам нужно сделать, это установить пакет rpy.
# Установите модуль, который позволяет работать с r и python одновременно
# ! pip install rpy2
После установки загрузите библиотеку
%load_ext rpy2.ipython
Приступим.
Показать информацию о сессии.
%%R
sessionInfo()R version 4.0.2 (2020-06-22)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.1 LTS
Matrix products: default
BLAS/LAPACK: /home/oscar/anaconda3/lib/libmkl_rt.so
locale:
[1] LC_CTYPE=es_ES.UTF-8 LC_NUMERIC=C
[3] LC_TIME=es_ES.UTF-8 LC_COLLATE=es_ES.UTF-8
[5] LC_MONETARY=es_ES.UTF-8 LC_MESSAGES=es_ES.UTF-8
[7] LC_PAPER=es_ES.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] tools stats graphics grDevices utils datasets methods
[8] base
loaded via a namespace (and not attached):
[1] compiler_4.0.2
Начало работы
Установите пакет из CRAN следующим образом:
%%R
library(xml2)
library(rvest) ##очень важно
library(tibble)
library(magrittr)* Сохранение URL первой страницы таблицы с данными о примерно 100 фильмах в переменную base_url:%%R
base_url <- "https://www.the-numbers.com/movie/budgets/all"
The Numbers - Бюджеты фильмов
Примечание: Числа бюджета для фильмов могут быть как сложно найти, так и ненадежными. Киностудии и режиссеры часто пытаются сохранить...
* Парсинг HTML-контента из сохраненного URL:%%R
base_webpage <- read_html(base_url)* Теперь, как вы можете видеть здесь, после all/101 есть. Аналогично, есть еще много страниц с 100 фильмами каждая в таблице, все с разными URL.
Итак, мы должны сохранить 100 URL-адресов для 100 страниц для 10 000 фильмов?
Конечно нет! У нас есть определенные стили форматирования строк. Вы можете посетить документацию здесь.
4 Форматирование в стиле C | Обработка строк с помощью R
Эта книга стремится предоставить панорамный обзор широкого спектра операций с строками, которые можно выполнить с помощью...
Таким образом, для строк мы используем %s.
%%R
new_urls<- "https://www.the-numbers.com/movie/budgets/all/%s"* Создание фрейма данных первых 100 фильмов:
*html_table(): преобразует таблицы HTML в фреймы данных.
%%R
table_base <- rvest::html_table(base_webpage)[[1]] %>%
tibble::as_tibble(.name_repair = "unique") # восстановление повторяющихся столбцовR[write to console]: Новые имена:
* `` -> ...1* Создание фрейма данных следующего набора фильмов:
%%R
# создание двух пустых фреймов данных
table_new <-data.frame()
df <- data.frame()
# итератор
i<-101
# он выполняет цикл 5501 раз, чтобы извлечь, сохранить и объединить около 5000 уже извлеченных фильмов.
while (i<5502) {
new_webpage<- read_html(sprintf(new_urls,i))
table_new <- rvest::html_table(new_webpage)[[1]] %>%
tibble::as_tibble(.name_repair = "unique") # восстановление повторяющихся столбцов
df<- rbind(df,table_new)
i=i+100
}
* Объединение table_base и df:%%R
df_movies <- merge(table_base,df, all = T)* Давайте посмотрим, как выглядит наш фрейм данных точно:%%R
head(df_movies)...1 ReleaseDate Movie ProductionBudget
1 1 Apr 23, 2019 Avengers: Endgame $400,000,000
2 1,000 Apr 28, 2000 The Flintstones in Viva Rock Vegas $58,000,000
3 1,001 Apr 4, 2008 Leatherheads $58,000,000
4 1,002 Mar 22, 2017 Life $58,000,000
5 1,003 Dec 18, 2009 Did You Hear About the Morgans? $58,000,000
6 1,004 Dec 12, 2008 Che, Part 1: The Argentine $58,000,000
DomesticGross WorldwideGross
1 $858,373,000 $2,797,800,564
2 $35,231,365 $59,431,365
3 $31,373,938 $41,348,628
4 $30,234,022 $100,929,666
5 $29,580,087 $80,480,566
6 $1,802,521 $31,627,370
Вуаля! Мы выполнили нашу задачу.
* Теперь, если вы хотите, вы можете создать файл CSV этого фрейма данных для его физического сохранения на вашей системе с помощью:%%R
write.csv(df_movies,"moviesData_tutorial.csv")
%%R
summary(df_movies)...1 ReleaseDate Movie ProductionBudget
Length:5600 Length:5600 Length:5600 Length:5600
Class :character Class :character Class :character Class :character
Mode :character Mode :character Mode :character Mode :character
DomesticGross WorldwideGross
Length:5600 Length:5600
Class :character Class :character
Mode :character Mode :character
%%R
str(df_movies)'data.frame': 5600 obs. of 6 variables:
$ ...1 : chr "1" "1,000" "1,001" "1,002" ...
$ ReleaseDate : chr "Apr 23, 2019" "Apr 28, 2000" "Apr 4, 2008" "Mar 22, 2017" ...
$ Movie : chr "Avengers: Endgame" "The Flintstones in Viva Rock Vegas" "Leatherheads" "Life" ...
$ ProductionBudget: chr "$400,000,000" "$58,000,000" "$58,000,000" "$58,000,000" ...
$ DomesticGross : chr "$858,373,000" "$35,231,365" "$31,373,938" "$30,234,022" ...
$ WorldwideGross : chr "$2,797,800,564" "$59,431,365" "$41,348,628" "$100,929,666" ...
%%R
dim(df_movies)[1] 5600 6
%%R
colnames(df_movies)[1] "...1" "ReleaseDate" "Movie" "ProductionBudget"
[5] "DomesticGross" "WorldwideGross"
Заключение
Вот, сделано. С помощью нескольких строк кода мы смогли извлечь данные с нескольких страниц, используя всего один цикл. Этот учебник в основном намекает на использование стиля форматирования строк.
Надеюсь, это поможет вам развиваться в вашей тренировке.
Независимо от того, из каких книг, блогов, курсов или видео вы учитесь, когда дело доходит до реализации, все может выглядеть "вне программы".
Лучший способ учиться - это делать! Лучший способ учиться - это преподавать то, что вы узнали!
Никогда не сдавайся!
Увидимся в Linkedin!
Оскар Рохо Мартин - изучение науки о данных в Университете Деусто - Сан-Себастьян, Баскская страна, Испания | LinkedIn
Ссылки:
* [https://www.r-bloggers.com/tutorial-web-scraping-of-multiple-pages-using-r/](https://www.r-bloggers.com/tutorial-web-scraping-of-multiple-pages-using-r/)