Прошу прощения, если не нашел предыдущую тему по этому вопросу.Я хочу почистить этот сайт http://www.fao.org/countryprofiles/en/ В частности, эта страница содержит множество ссылок на информацию о стране.Структура этих ссылок:
http://www.fao.org/countryprofiles/index/en/?iso3=KAZ
http://www.fao.org/countryprofiles/index/en/?iso3=AFG
, и любая из этих страниц содержит интересующий меня раздел новостей. Конечно, я мог бы поцарапатьпостранично, но это было бы пустой тратой времени.
Я пробовал следующее, но это не работает:
countries <- read_html("http://www.fao.org/countryprofiles/en/") %>% html_nodes(".linkcountry") %>% html_text() country_news <- list() sub <- html_session("http://www.fao.org/countryprofiles/en/") for(i in countries[1:100]){ page <- sub %>% follow_link(i) %>% read_html() country_news[[i]] <- page %>% html_nodes(".white-box") %>% html_text() }
Есть идеи?
Вы можете получить все дочерние страницы со страницы верхнего уровня:
stem = 'http://www.fao.org' top_level = paste0(stem, '/countryprofiles/en/') all_children = read_html(top_level) %>% # ? and = are required to skip /iso3list/en/ html_nodes(xpath = '//a[contains(@href, "?iso3=")]/@href') %>% html_text %>% paste0(stem, .) head(all_children) # [1] "http://www.fao.org/countryprofiles/index/en/?iso3=AFG" # [2] "http://www.fao.org/countryprofiles/index/en/?iso3=ALB" # [3] "http://www.fao.org/countryprofiles/index/en/?iso3=DZA" # [4] "http://www.fao.org/countryprofiles/index/en/?iso3=AND" # [5] "http://www.fao.org/countryprofiles/index/en/?iso3=AGO" # [6] "http://www.fao.org/countryprofiles/index/en/?iso3=ATG"
Если вам не нравится xpath, версия CSS будет выглядеть так:
xpath
html_nodes('a') %>% html_attr('href') %>% grep("?iso3=", ., value = TRUE, fixed = TRUE) %>% paste0(stem, .)
Теперь вы можете перебирать эти страницы и извлекать то, что вы хотите