在这个网站上https://www.quebec.ca/agriculture-environnement-et-ressources-naturelles/faune/gestion-faune-habitats-fauniques/especes-fauniques-menacees-vulnerables/liste,有我的物种表想要提取。
library(rvest)
sp.list = "https://www.quebec.ca/agriculture-environnement-et-ressources-naturelles/faune/gestion-faune-habitats-fauniques/especes-fauniques-menacees-vulnerables/liste"
# Get website
wp.list = read_html(species.list)
# Extract name of sections
headers = wp.list %>% html_elements("h3") %>% html_text2() %>% .[1:24]
# Get tables
tab = read_html(sp.list) %>% html_table(header = TRUE)
# Name tables
names(tab) = headers
# Combine tables
tab.gr = dplyr::bind_rows(tab, .id = "group")
这使:
tab.gr
# A tibble: 180 × 3
group Espèce `Nom latin`
<chr> <chr> <chr>
1 Mollusques Anodonte du gaspareau Utterbackiana implicata
2 Mollusques Obovarie olivâtre Obovaria olivaria
3 Insectes Bourdon à tache rousse Bombus affinis
4 Insectes Coccinelle à neuf points Coccinella novemnotata
我能够获取节标题h2
,但无法将它们与每个h3
节相关联
get.section = wp.list %>% html_nodes('.frame, .frame-default, .frame-type-textmedia, .frame-layout-0')
pas.dans.cette.page = !grepl(pattern = "Dans cette", x = get.section)
subset.listes = get.section[pas.dans.cette.page]
sections.tables = subset.listes[grep(pattern = "Liste des esp", x = subset.listes)]
sections.tables %>% html_elements("h2") %>% html_text2()
[1] "Liste des espèces menacées"
[2] "Liste des espèces vulnérables"
[3] "Liste des espèces susceptibles d’être désignées comme menacées ou vulnérables"
那么我怎样才能获得标题(例如,“Liste des espèces menacées”)及其组(例如,“Mollusques”)及其表格?
rvest
是建立在 之上的xml2
,所以了解一些XPath和一些(有些不直观的)xml2
技巧在这里会很方便。例如,我们可以通过搜索<h2>
每个表之前的元素来构建与表元素列表匹配的节向量,基本上使用表元素作为锚点并从每个表元素回溯 HTML 树。随着最后一部分的页面结构发生变化,我们需要对最后几张表的策略进行一些调整,但相同的策略仍然适用。另一种选择是迭代每个部分(即仅处理该特定部分中的表),但由于结构变化,它在这里不太合适。
结果:
创建于 2024-03-14,使用reprex v2.1.0