刮刮维基百科表r

时间:2017-11-29 01:59:02

标签: html r screen-scraping rvest

试图从维基百科的人类发展指数中剔除前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)

2 个答案:

答案 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或其他东西进行解析。