从文档中提取唯一的HTML标记

时间:2015-08-18 18:17:37

标签: xml r web-scraping

我在R中有一个HTML文档,我想从该文档中提取一个唯一标记列表,并列出它们的出现频率。

我可以按如下方式循环遍历每个可能的标记,但希望找到一个不需要预定义标记列表的解决方案:

library('XML')
url <- 'http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array'
doc <- htmlParse(url)
all_tags <- c('//p', '//a', '//b', '//u', '//i')
counts <- sapply(all_tags, function(x) length(xpathSApply(doc, x)))
free(doc)

2 个答案:

答案 0 :(得分:3)

经典XML包版本可能如下所示:

tab <- table(xpathSApply(doc, "//*", xmlName))
tab[c('p', 'a', 'b', 'u', 'i')]

答案 1 :(得分:2)

Hadleyverse版本(但必要时可以恢复到基础):

library(xml2)
library(dplyr)

url <- 'http://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster-than-an-unsorted-array'
doc <- read_html(url)
tags <- xml_name(xml_find_all(doc, "//*"))

# base version
sort(table(tags))

## tags
##     body     form       h1     head     html    title      sub       h3        i noscript 
##        1        1        1        1        1        1        2        3        3        3 
##       h4       h2       th     link       hr       ol       ul       em    input        b 
##        4        5        5        7        8       10       11       12       12       14 
##   script     meta      img       br      pre   strong    tbody    table     code       li 
##       16       17       26       27       41       43       55       79      104      115 
##       tr        p       td      div        a     span 
##      127      150      268      358      371      423 

# hadleyverse
arrange(count(data_frame(tag=tags), tag), desc(n))

## Source: local data frame [36 x 2]
## 
##      tag   n
## 1   span 423
## 2      a 371
## 3    div 358
## 4     td 268
## 5      p 150
## 6     tr 127
## 7     li 115
## 8   code 104
## 9  table  79
## 10 tbody  55
## ..   ... ...