---
output: html_document
editor_options: 
  chunk_output_type: console
---

#### Как устроены html страницы

- **Разбиение на блоки** (nodes)
"<node_name> ... </node_name>" 
Примеры меток: html, title, div, h1, p  

- **Вложенная структура блоков**
html имеет древовидную структуру

- **Аттрибуты меток** (attributes)
Метки, помимо имени, содержат атрибуты — элементы, дающие дополнительную информацию о том, как браузер должен отображать эту метку. 
"<node_name attribute = attribute_value> ... </node_name>"
Примеры аттрибутов: color, align

- **Справка** 
https://www.w3schools.com 






#### Xpath

Язык запросов к элементам html-документа.

- **Навигация по структуре документа**

div/a Строгое следование вершин друг за другом (a является прямым потомком div)

div//a Нестрогое (a должно находиться где угодно в поддереве div)

/div Выберет вершину div из корня

//div Выберет вершину div где угодно на странице

- **Аттрибуты узлов**

//table[@class="player-search-results sticky-enabled sticky-table"]

//div[@id = 'mchars']

* @id - обращение к атрибуту id
* выберет все такие div, у которых есть атрибут id, значение которого равно mchars


//div[@class="title"
@-прописываем атрибут
#### Как собирать страницы в R (rvest)

Подгрузка пакета
```{r}
library(tidyverse)
library(stringr)
library(rvest)
```

Задаем какую страницу собираем и скачиваем ее
```{r}
url = "http://www.imdb.com/chart/boxoffice"
page = read_html(url)
```

Вытаскиваем узел
```{r}
page %>% html_node(xpath = "//h1[@class='header']")
```

Текст из узла
```{r}
page %>% html_node(xpath = "//h1[@class='header']") %>% html_text()
```

Названия фильмов
```{r}
page %>% html_node(xpath = '//td[@class="titleColumn"]/a') %>% html_text()

page %>% html_nodes(xpath = '//td[@class="titleColumn"]/a') %>% html_text()

titles = page %>% html_nodes(xpath = '//td[@class="titleColumn"]/a') %>% html_text()
titles
```

Самостоятельное задание: соберите колонки Weekend, Gross, Weeks
```{r}
weekend = page %>% html_nodes(xpath = '//td[@class="ratingColumn"]') %>% html_text()
weekend

gross = page %>% html_nodes(xpath = '//td[@class="ratingColumn"]/span') %>% html_text() %>% str_remove("M")
gross

weeks = page %>% html_nodes(xpath = '//td[@class="weeksColumn"]') %>% html_text()
weeks
```

Аттрибуты (например ссылку)
```{r}
links  = page %>% html_nodes(xpath = '//td[@class="titleColumn"]/a') %>% html_attr("href")
links
```

Собираем всю таблицу :)
```{r}
df2 = page %>% html_node(xpath = '//table[@data-caller-name="chart-boxoffice"]') %>% html_table()

df2$links = str_c("http://www.imdb.com/", links)
```

Переходим на страницу каждого фильма и что-нибудь собираем
```{r}
df2$summary = NA

for(i in 1:nrow(df2)){
  
  link = df2$links[i]
  
  page = read_html(link)
  
  df2$summary[i] = page %>% 
    html_node(xpath = "//div[@class='summary_text']") %>% 
    html_text() %>% 
    str_trim()
  
  print(i)
  Sys.sleep(1)
}

```


# way to selenium

```{r}
link = "https://www.tripadvisor.ru/Hotel_Review-g297947-d652459-Reviews-El_Mouradi_Cap_Mahdia-Mahdia_Mahdia_Governorate.html"

page = read_html(link)

page %>% 
  html_node(xpath = '//div[@class="review-container"]//p[@class="partial_entry"]') %>% 
  html_text()

```

- Как открыть следующие 10 отзывов?
https://www.tripadvisor.ru/Hotel_Review-g297947-d652459-Reviews-or10-El_Mouradi_Cap_Mahdia-Mahdia_Mahdia_Governorate.html
https://www.tripadvisor.ru/Hotel_Review-g297947-d652459-Reviews-or20-El_Mouradi_Cap_Mahdia-Mahdia_Mahdia_Governorate.html

- А как прочитать их целиком?
- Или сделать, чтобы отключить перевод?



