在R中未提取XML文件

时间:2017-06-13 18:17:38

标签: r

我正在开发一个项目,要求我浏览各种链接页面,并在这些链接中找到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文件,我一直收到错误。这不是正确的功能吗?

1 个答案:

答案 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中很少是一个好主意。