试图从维基百科的人类发展指数中剔除前8个表(非常高,高,中,低)。
开始但是获得零列表。我究竟做错了什么? R的新人:(
libray(rvest)
url <- "https://en.wikipedia.org/wiki/List_of_countries_by_Human_Development_Index#Complete_list_of_countries"
webpage <- read_html(url)
hdi_tables <- html_nodes(webpage, 'table')
head(hdi_tables, n = 10)
scrape <- url %>%
read_html() %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/div/div[5]/table/tbody/tr/td[1]/table') %>%
html_table()
head(scrape, n=10)
答案 0 :(得分:1)
我认为使用original data source:
会更容易在下拉选择列表中选择“人类发展指数(HDI)”,然后点击“下载数据”链接以获取名为Human Development Index (HDI).csv
的CSV文件。
将其读入R:
library(tidyverse)
Human_Development_Index_HDI_ <- read_csv("path/to/Human Development Index (HDI).csv",
skip = 1)
您可以重塑数据,获取2015年的值并将国家/地区分为低,中,高或非常高:
hdi <- Human_Development_Index_HDI_ %>%
gather(Year, HDI, -`HDI Rank (2015)`, -Country) %>%
filter(Year == "2015") %>%
na.omit() %>%
mutate(Year = as.numeric(Year),
classification = cut(HDI,
breaks = c(0, 0.549, 0.699, 0.799, 1),
labels = c("low", "medium", "high", "very_high")))
hdi
# A tibble: 188 x 5
`HDI Rank (2015)` Country Year HDI classification
<int> <chr> <dbl> <dbl> <fctr>
1 169 Afghanistan 2015 0.479 low
2 75 Albania 2015 0.764 high
3 83 Algeria 2015 0.745 high
4 32 Andorra 2015 0.858 very_high
5 150 Angola 2015 0.533 low
6 62 Antigua and Barbuda 2015 0.786 high
7 45 Argentina 2015 0.827 very_high
8 84 Armenia 2015 0.743 high
9 2 Australia 2015 0.939 very_high
10 24 Austria 2015 0.893 very_high
# ... with 178 more rows
如果您想要复制维基百科表格中的“从上一年度更改”值,您可以更改过滤器以获取2014年的值。
答案 1 :(得分:0)
如果你可以改为解析维基百科标记语言,你可以尝试使用WikipediR来获取页面的标记(从浏览文档开始,尝试将page_content设置为as_wikitext
真正)。然后你会得到一些看起来像这样的行:
| 1 || {{steady}} ||style="text-align:left"| {{flag|Norway}} || 0.949 || {{increase}} 0.001
这应该在R中使用strsplit
或其他东西进行解析。