【问题标题】:Extracting javascript syntax from a xml node using R使用 R 从 xml 节点中提取 javascript 语法
【发布时间】:2015-02-17 22:16:07
【问题描述】:

我希望这不会太麻烦,但我正在尝试从 XML 节点或使用 R 的节点集提取 javascript 语法。

我想从以下节点中提取部分 url:

[[76]] <'a href="javascript:;" onclick="self.name='regmain'; window.open('regcssm.asp?Cl=23&amp;Lg=1&amp;Co=1201.00', 'regpopup', 'height=400,width=400,resizable=yes,scrollbars=yes'); return false;">1201.00<'/a> 

这个页面来自UN Harmonized System for Products Classification,实际上是一个.asp页面。

但是,我设法解析它并找到了必要的节点。

无论是从网络上还是在此论坛中,我都无法确定 R 是否具有提取此 url 的能力:(regcssm.asp?Cl=23&Lg=1&Co=1201.00)。 我试过 xmlGetAttr (它只给出'javascript')和 xpathSApply 给出 1201.00。

有没有办法这样做,或者从 R 中的 xml 中提取这一行作为文本字符串?

WIN 7-64BIT,R 3.0.1。

【问题讨论】:

    标签: javascript r xml-parsing web-scraping


    【解决方案1】:

    假设你解析的 html 存储在bar

    # Extract the relevant "onclick" attributes
     w <- xpathSApply(bar,path = '//a[@href="javascript:;"][@onclick]',
            fun = xmlGetAttr, "onclick")
    
    # extract the text between brackets `window.open()`  split by `,` and then
    # extract the first component and remove `'` 
    
    gsub("'",'',sapply(strsplit(gsub(".*\\((.*)\\).*", "\\1", w),','),head,1))
    

    【讨论】:

    • 也可以,所以我错过了带有@onclick 属性的额外barackets。毕竟我可能会坚持下去,因为我已经熟悉 xml 包......
    【解决方案2】:

    我确信有一个更短的答案(我有 R 版本 3.1.1):

    install.packages("rvest"); install.packages("magrittr")
    library(rvest);library(magrittr)
    UN <- html("http://unstats.un.org/unsd/cr/registry/regso.asp?Ci=11&Lg=1")
    UN %<>% html_nodes(".content table") %>% .[[2]] %>% 
    html_nodes(".tcont, .lcont") %>% html_nodes("a") %>% .[-1]
    UN %<>% lapply(function(x) x %>% as("character"))
    UN %<>% substr(67, 108)
    UN
    

    【讨论】:

    • 谢谢@dimitris_ps,这太完美了。不知道 rvest 和 magrittr,所以我一有空就会深入研究它们,或者下次我必须执行类似的任务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多