Webscraping:使用 inspect 在 R 中找到 node/table ID

Webscraping: find the node/table ID in R using inspect

我正在做一个网络抓取练习,我想使用下面的 url 获得下面的 table:

https://en.wikipedia.org/wiki/COVID-19_pandemic_by_country_and_territory

2022 年 4 月 7 日更新的 COVID-19 病例、死亡和发病率(按地点)[5]

我右键单击浏览器,检查并希望找到 table ID/node 它将替换下面代码中的 ?。我找不到这个节点。

library(tidyverse)
library(rvest)

# get the data 

url <- "https://en.wikipedia.org/wiki/COVID-19_pandemic_by_country_and_territory"

html_data <- read_html(url)

html_data %>%
  html_node("??") %>% # how do I get the node containing the table
  html_table() %>% 
  as_tibble()

谢谢

使用浏览器获取 table 的 xpath 并使用它代替 "??"

suppressPackageStartupMessages({
  library(httr)
  library(rvest)
  library(dplyr)
})

url <- "https://en.wikipedia.org/wiki/COVID-19_pandemic_by_country_and_territory"
xp <- "/html/body/div[3]/div[3]/div[5]/div[1]/div[15]/div[5]/table"

html_data <- read_html(url)

html_data %>%
  html_elements(xpath = xp) %>% # how do I get the node containing the table
  html_table() %>%
  .[[1]] %>%
  select(-1)
#> # A tibble: 218 x 4
#>    Country                `Deaths / million` Deaths    Cases      
#>    <chr>                  <chr>              <chr>     <chr>      
#>  1 World[a]               783                6,166,510 495,130,920
#>  2 Peru                   6,366              212,396   3,549,511  
#>  3 Bulgaria               5,314              36,655    1,143,424  
#>  4 Bosnia and Herzegovina 4,819              15,728    375,948    
#>  5 Hungary                4,738              45,647    1,863,039  
#>  6 North Macedonia        4,433              9,234     307,142    
#>  7 Montenegro             4,308              2,706     233,523    
#>  8 Georgia                4,212              16,765    1,650,384  
#>  9 Croatia                3,833              15,646    1,105,315  
#> 10 Czech Republic         3,712              39,816    3,850,902  
#> # ... with 208 more rows

reprex package (v2.0.1)

于 2022-04-08 创建

我建议使用更 stable、更快、描述性更好的 css 选择器列表,而不是冗长而脆弱的 xpath。有一个特定的父 ID(通常用于匹配的最快方法)和子 table class(第二快)组合,您可以使用:

library(magrittr)
library(rvest)

df <- read_html('https://en.wikipedia.org/wiki/COVID-19_pandemic_by_country_and_territory') %>%
  html_element('#covid-19-cases-deaths-and-rates-by-location .wikitable') %>%
  html_table()

推荐阅读:

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors

练习:

https://flukeout.github.io/