将列绑定到数据框时如何处理缺失的行(刮擦问题!)

时间:2017-04-04 17:11:23

标签: html r xml web-scraping mapply

我尝试通过将URL附加到已删除的HTML表格来创建数据框架,然后将这些文件写入各个csv文件。这些数据涉及法案在下议院和上议院通过各自的阶段。我编写了一个函数(见下文),它读取表格,解析HTML代码,擦除所需的URL,将两者绑定在一起,提取与上议院有关的行,然后编写csv文件。然后,该函数跨两个列表运行(一个链接到Bill阶段页面,另一个是简化文件名)。

    library(XML)

    lords_tables <- function (x, y) {
      tables <- as.data.frame(readHTMLTable(x)) 
      sitePage <- htmlParse(x) # This parses web code
      hrefs <- xpathSApply(sitePage, "//td/descendant::a[1]", 
                   xmlGetAttr, 'href') ## First href child of the a nodes
      table_bind <- cbind(tables, hrefs) 
      row_no <- grep(".+: House of Lords|Royal Assent", 
                         table_bind$NULL.V2)   #Gives row position of Lords|Royal Assent
      lords_rows <- table_bind[grep(".+: House of Lords|Royal Assent", table_bind$NULL.V2), ]  # Subsets rows containing House of Lords|Royal Assent

    write.csv(lords_rows, file = paste0(y, ".csv"))
    }


    # x = a list of links to the Bill pages/ y = list of simplified names
    mapply(lords_tables, x=link_list, y=gsub_URL)

这适用于每个阶段发生辩论的情况。但是,有些情况会出现问题,例如:

    browseURL("http://services.parliament.uk/bills/2010-12/armedforces/stages.html")

对于这个例子,在第3次阅读中没有发生过辩论:下议院&#39;并再次在皇家同意&#39;。这会导致返回以下错误:

    Error in data.frame(..., check.names = FALSE) : 
     arguments imply differing number of rows: 21, 19

在克服这个错误时,我希望对失踪的舞台有一个NA。有没有人知道如何实现这一目标?我是一个相对的n00b,所以请随意为整个问题提出一个更优雅的方法。

提前致谢!

0 个答案:

没有答案