整个下午都在努力实现看似非常简单的事情。
我需要遍历多个网页,删除任何锚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文件?*
答案 0 :(得分:0)
如果您有非R解决方案,请发布,如果我可以将其翻译为R我会,但它仍然可能对其他人有用。
假设HTML首先是格式良好或者可以整理,您可以使用非常简单的XSLT样式表来转换文档。
XSLT样式表
multimap<K, map<V, size_t>>
据我所知,你可以用R来应用XSLT转换,这只是找到一个可以的包的问题。 Sxslt package怎么样?也许你会发现this SO answer很有用。