R:从HTML Doc中删除HREF属性

时间:2016-01-05 16:51:12

标签: xml r xpath

整个下午都在努力实现看似非常简单的事情。

我需要遍历多个网页,删除任何锚href="..."标记的<a>部分,这样当我将这些标记转换为PDF用作在线评估任务时,它们就不再可以点击了

对我来说,显而易见的方法是加载HTML文件,解析它,然后gsub输出href位,但使用类似......

uri <- "myPage.html"    
doc.parsed  <- htmlTreeParse(uri, encoding = "UTF-8", useInternal=TRUE)    # parse HTML into tree structure
doc.anchors = unlist(xpathApply(doc.parsed, "//a"), xmlValue)
doc.anchors = gsub("href='([^\"]*)'", ' ', doc.anchors)

刚刚结束......

> doc.anchors
  [1] "<pointer: 0x109672dc0>" "<pointer: 0x109683560>" "<pointer: 0x109681a90>" "<pointer: 0x109623620>" "<pointer: 0x109621590>" "<pointer: 0x109621860>" "<pointer: 0x1096267b0>"
  [8] "<pointer: 0x109626ae0>" "<pointer: 0x109626e10>" "<pointer: 0x109627140>" "<pointer: 0x109627470>" "<pointer: 0x1096277a0>" "<pointer: 0x109627ad0>" "<pointer: 0x109627e00>"
 [15] "<pointer: 0x109628130>" "<pointer: 0x109628460>" "<pointer: 0x109628790>" "<pointer: 0x10962b1c0>" "<pointer: 0x10962b9b0>" "<pointer: 0x10962c660>" "<pointer: 0x10962cb70>"
 [22] "<pointer: 0x10962d080>"

任何人都可以指出我会采用HTML文档,找到锚标记并删除href属性(保留锚标记)吗?

所以<a href="http://mytest.com/test.html"/>只会变成<a/>

  

更新:这个和下面的另一个小时会产生一个很好的列表,其中包含href属性的剥离...

uri         <- "myPage.html" 
doc.parsed  <- htmlTreeParse(uri, encoding = "UTF-8", useInternal=TRUE)    # parse HTML into tree structure
doc.root    <- xmlRoot(doc.parsed)
doc.body    <- xmlChildren(doc.root)$body

doc.nodes   <- getNodeSet(doc.body, "//a[@href]")
sapply(doc.nodes, function(el) removeAttributes(el))

[[1]]
<a>Some link text</a> 

[[2]]
<a>Africa</a> 

[[3]]
<a>Arabic</a> 

[[4]]
<a>Argentina</a>
     

*问:关于如何将这些更新的节点应用回来的任何想法   原始的html文件?*

1 个答案:

答案 0 :(得分:0)

  

如果您有非R解决方案,请发布,如果我可以将其翻译为R我会,但它仍然可能对其他人有用。

假设HTML首先是格式良好或者可以整理,您可以使用非常简单的XSLT样式表来转换文档。

XSLT样式表

multimap<K, map<V, size_t>>

据我所知,你可以用R来应用XSLT转换,这只是找到一个可以的包的问题。 Sxslt package怎么样?也许你会发现this SO answer很有用。