Html 如何使用相对于标题的rvest刮取wikipedia中的有序和无序列表
我想从Wikipdia中收集几个国家的事件,并将每个事件放在一行表中。某个数据可以有一个事件(其中有一个主项目符号)或多个事件(其中有“子项目符号”)Html 如何使用相对于标题的rvest刮取wikipedia中的有序和无序列表,html,r,xml,rvest,Html,R,Xml,Rvest,我想从Wikipdia中收集几个国家的事件,并将每个事件放在一行表中。某个数据可以有一个事件(其中有一个主项目符号)或多个事件(其中有“子项目符号”) 我遇到的问题是如何同时获取有序列表和无序列表,并将它们清晰地分开。下面的代码将抓住“子项目符号”,但不是“主要”项目符号。如果我更改代码以排除/li,那么它将把“子项目符号”放在单个单元格中我想知道是否有办法更容易地将“主要”和“次要要点”分开。 对于包含不同国家/地区事件的页面,html布局似乎略有不同。是否可以基于标头(而不是相对或绝对位置
/li
,那么它将把“子项目符号”放在单个单元格中我想知道是否有办法更容易地将“主要”和“次要要点”分开。
# This gets the sub bullet points of the events, but not the main ones
page <- xml2::read_html("https://en.wikipedia.org/wiki/2020_in_the_United_States")
month_data = page %>%
html_nodes(xpath = "/html/body/div[3]/div[3]/div[5]/div[1]/ul[3]/li") %>%
html_text()
#这将获得事件的次要点,但不是主要要点
页数%
html_节点(xpath=“/html/body/div[3]/div[3]/div[5]/div[1]/ul[3]/li”)%>%
html_text()
此网页没有结构,它只是一个长长的标签列表,没有清楚地将不同的部分分开
这是部分解决方案:
library(rvest)
library(xml2)
library(dplyr)
page <- xml2::read_html("https://en.wikipedia.org/wiki/2020_in_the_United_States")
lineitems <- page %>% html_nodes(xpath = "//html/body/div[3]/div[3]/div[5]/div[1]/ul[3]/li")
#Count the number of child ul nodes
subcount <- lineitems %>% html_node("ul") %>% xml_length()
output <- lapply(1:length(subcount), function(i) {
if(subcount[i] == 0 ){
out <- lineitems[i] %>% html_text()
}
else {
out <- lineitems[i] %>% html_node("ul") %>%
html_nodes(xpath=".//li") %>% html_text()
}
out
})
#name the list items with the data
names(output) <- lineitems %>% html_node("a") %>%
html_attr("title")
#a list for each date
output
库(rvest)
库(xml2)
图书馆(dplyr)
页面%xml_长度()
产量%
html_节点(xpath=“../li”)%%>%html_文本()
}
出来
})
#用数据命名列表项
名称(输出)%html\U节点(“a”)%%>%
html_属性(“标题”)
#每个日期的清单
输出
我没有时间和耐心来改进这个。根据可用属性而不是特定的html/xml标记选择节点可能会更容易。谢谢!没想到会这么难。你的部分解决方案非常有用。