我正在开发一个项目,要求我浏览各种链接页面,并在这些链接中找到xml文件并解析它。我在解压缩xml文件时遇到问题。每个链接中有两个xml文件,我对那个更大的文件感兴趣。如何提取xml文件,找到最大大小的文件。我尝试使用grep函数,但它经常给我一个错误。
sotu<-data.frame()
for (i in seq(1,501, 100))
{
securl <- paste0("https://www.sec.gov/cgi-bin/srch-edgar?text=abs-
ee&start=", i, "&count=100&first=2016")
main.page <- read_html(securl)
urls <- main.page %>%
html_nodes("div td:nth-child(2) a")%>%
html_attr("href")
baseurl <- "https://www.sec.gov"
fulllink <-paste(baseurl, urls, sep = "")
names <- main.page %>%
html_nodes ("div td:nth-child(2) a") %>%
html_text()
date <- main.page %>%
html_nodes ("td:nth-child(5)") %>%
html_text()
result <- data.frame(urls=fulllink,companyname=names,FilingDate=date, stringsAsFactors = FALSE)
sotu<- rbind(sotu,result)
}
for (i in seq(nrow(sotu)))
{
getXML <- read_html(sotu$urls[1]) %>%
grep("xml", getXML, ignore.case=FALSE )
}
一切正常,除非我尝试遍历每个链接并找到xml文件,我一直收到错误。这不是正确的功能吗?
答案 0 :(得分:0)
在dplyr
的帮助下,我们可以做到:
sotu %>%
rowwise() %>%
do({
read_html(.$urls) %>%
html_table() %>%
as.data.frame() %>%
filter(grepl('.*\\.xml', Document)) %>%
filter(Size == max(Size))
})
或者,至少在示例中类型总是'EX-102'
:
sotu %>%
rowwise() %>%
do({
read_html(.$urls) %>%
html_table() %>%
as.data.frame() %>%
filter(Type == 'EX-102')
})
这也摆脱了for
循环,这在R中很少是一个好主意。