Я пытаюсь просмотреть в Интернете таблицу со следующей страницы (https://www.coya.com/bike/fahrrad-index-2019), а именно значения индекса велосипеда для 50 немецких городов (если вы нажмете «Alle Ergebnisse +», вы увидите все 50 городов.
Мне особенно нужны некоторые колонки («Bewertung spezielle Radwege & Qualität der Radwege», «Investitionen & QUalität der Infrastruktur», «Bewertung der Infrastruktur», «Fahrradsharing-Score», «Autofreier Tag», «Critical-Mass-Fahrrad-a. «Событие-Оценка».
Вот что я пробовал:
library(rvest)
num_link = "https://www.coya.com/bike/fahrrad-index-2019"
num_page= read_html(num_link)
xyc= num_page %>% html_nodes("._1200:nth-child(2)") %>% html_text()
Я попробовал Selectorgadget, но, к сожалению, все значения таблицы я получаю в виде длинной строки (str_split сложно, потому что запятые в числах смешались с запятыми между числами:
"[1] "Ergebnisse für DeutschlandKriminalitätInfrastrukturFahrrad-SharingEvents#StadtLandSizeTotal Score1OldenburgDeutschlandK57,90,4271,94588,3594,4684,5227,153,0590,3454,1836,4515,0525,75N31,5216,2669,122MünsterDeutschlandK58,740,3910,53445,5883,0488,4328,1551,2388,0453,0535,522630,76N23,8412,4265,933Freiburg i. Breisg.DeutschlandK59,350,"
Может ли кто-нибудь помочь мне очистить таблицу, если это возможно, особенно только некоторые значения определенных столбцов (см. Выше)? Очень благодарен за любую помощь / совет.
Заранее спасибо. (Я новичок, будьте осторожны.)





Вот один из способов решить загадку. Хотя в именах строк используется много значков, я просто оставляю пустое имя столбца. Вы можете создать имена векторов и назначить их вручную с помощью
names(table_content) <- names_vector
Вот код
library(rvest)
#> Loading required package: xml2
library(dplyr, warn.conflicts = FALSE)
library(purrr)
# Here is just reuse your code
num_link <- "https://www.coya.com/bike/fahrrad-index-2019"
num_page <- read_html(num_link)
# Extract the items from your code but go further down
table_content <- num_page %>% html_nodes("._1200:nth-child(2)") %>%
# Extract the node that contain the table
html_nodes(css = ".w-dyn-list") %>%
# Extract the nodes corresponded to each row
html_nodes(css = ".bike-collection-item") %>%
# Then map the function that take each rows in and convert them to a table
# and bind them together into one table
map_dfr(function(x) {
# suppress the message due to no column name was feed into map_dfc
suppressMessages(
x %>% html_nodes(".td") %>%
map_dfc(function(x) { x %>% html_text })
)
})
#> # A tibble: 70 x 21
#> ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...10 ...11 ...12 ...13
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 1 Olde… Deut… K 57,9 0,427 1,94 588,… 94,46 84,52 27,1 53,05 90,34
#> 2 2 Müns… Deut… K 58,74 0,391 0,53 445,… 83,04 88,43 28,15 51,23 88,04
#> 3 3 Frei… Deut… K 59,35 0,34 2,27 962,… 88,87 77,52 32,57 48,11 93,49
#> 4 4 Bamb… Deut… K 55,59 0,302 0 456,… 89,04 92,66 30,29 47,74 93,75
#> 5 5 Gött… Deut… K 62,66 0,28 3,07 379,… 92,8 80,99 23,03 48,07 89,18
#> 6 6 Heid… Deut… K 63,14 0,22 1,21 394,… 90,39 88,33 29,02 47,88 94,21
#> 7 7 Karl… Deut… K 57,39 0,25 4,23 725,… 90,35 71,62 18,75 46,33 93,93
#> 8 8 Brau… Deut… K 67,36 0,21 0 522,… 85,89 90,97 20,55 49,2 89,78
#> 9 9 Kons… Deut… K 62,77 0,22 4,6 121,… 93,62 76,98 23 48,49 94,09
#> 10 10 Brem… Deut… M 58,86 0,21 1,38 334,… 87,34 87,15 18,64 59,78 94,64
#> # … with 60 more rows, and 8 more variables: ...14 <chr>, ...15 <chr>,
#> # ...16 <chr>, ...17 <chr>, ...18 <chr>, ...19 <chr>, ...20 <chr>,
#> # ...21 <chr>
Created on 2021-04-08 by the reprex package (v1.0.0)
Вероятно, вы захотите создать одну таблицу за раз, а затем столбцы по одному, чтобы затем вы могли создать фрейм данных. Попробуйте, например:
col1 <- num_page %>% html_nodes(paste0(".w-dyn-item :nth-child(2) div")) %>%
html_text()
Гаджет селектора изящен, но обычно мне нужно много экспериментировать, чтобы получить правильные селекторы.