我尝试通过将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,所以请随意为整个问题提出一个更优雅的方法。
提前致谢!