首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在html表中找到包含特定图标的单元格

在html表中找到包含特定图标的单元格
EN

Stack Overflow用户
提问于 2015-05-31 09:59:30
回答 1查看 306关注 0票数 3

我正在寻找代码,它可以告诉我特定图标驻留在html表的哪个单元格中。下面是我正在做的工作:

代码语言:javascript
运行
复制
u <- "http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1"
doc <- rvest::html(u)
tab <- rvest::html_table(doc, fill = TRUE)[[6]]

专栏“Pos”指定球员在场上的位置。其中有些有一个额外的图标。我可以看到这些图标出现在页面上如下:

代码语言:javascript
运行
复制
rvest::html_nodes(doc, ".kapitaenicon-table")

但这并不能告诉我他们在哪里。我希望我的代码返回图标出现在表中“Pos.Column”的第2、10、11、27行中。我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 13:45:31

更多的rvest和XPath魔法可以为您提供索引:

代码语言:javascript
运行
复制
library(rvest)
library(magrittr)
library(XML)

pg <- html("http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1")

pg %>% 
  html_nodes("table") %>% 
  extract2(6) %>% 
  html_nodes("tbody > tr") %>% 
  sapply(function(x) {
    length(xpathSApply(x, "./td[8]/span[@class='kapitaenicon-table icons_sprite']")) == 1
  }) %>% which

## [1]  2 10 11 27

这将得到第6个表,提取trs,然后通过它们查找包含正确span/class的第8 td。如果XPath搜索失败,它将返回一个空列表,因此您可以使用长度来确定哪些行中有图标,哪些行没有。

这是:

代码语言:javascript
运行
复制
pg %>% 
  html_nodes(xpath="//table[6]/tbody/tr/td[8]") %>% 
  xmlSApply(xpathApply, "boolean(./span[@class='kapitaenicon-table icons_sprite'])") %>% 
  which

同样有效,它会更紧一些(而且更快)。它使用XPath boolean操作来测试是否存在。如果您在节点上没有其他操作要执行,则这是更复杂的操作。

这是一个xml2版本,尽管我必须相信在xml2中必须有更好的方法来实现这一点。

代码语言:javascript
运行
复制
library(xml2)
library(magrittr)

pg2 <- read_html("http://www.transfermarkt.nl/lionel-messi/leistungsdaten/spieler/28003/saison/2014/plus/1")
pg2 %>% 
  xml_find_all("//table[6]/tbody/tr/td[8]") %>% 
  as_list %>% 
  sapply(function(x) {
    inherits(try(xml_find_one(x, "./span"), silent=TRUE), "xml_node")
  }) %>% which

更新

对于版本0.1.0.9000 of xml2,我必须执行以下操作:

代码语言:javascript
运行
复制
pg2 %>% xml_find_all("//table") %>% 
  as_list %>% 
  extract2(6) %>% 
  xml_find_all("./tbody/tr/td[8]") %>% 
  as_list %>% 
  sapply(function(x) {
    inherits(try(xml_find_one(x, "./span"), silent=TRUE), "xml_node")
  }) %>% which

不应该是这样的,我有提交了一个错误报告

代码语言:javascript
运行
复制
Session info -------------------------------------------------------------------------
 setting  value                       
 version  R version 3.2.0 (2015-04-16)
 system   x86_64, darwin13.4.0        
 ui       RStudio (0.99.441)          
 language (EN)                        
 collate  en_US.UTF-8                 
 tz       America/New_York            

Packages -----------------------------------------------------------------------------
 package    * version date       source        
 curl       * 0.5     2015-02-01 CRAN (R 3.2.0)
 devtools   * 1.7.0   2015-01-17 CRAN (R 3.2.0)
 magrittr     1.5     2014-11-22 CRAN (R 3.2.0)
 Rcpp       * 0.11.5  2015-03-06 CRAN (R 3.2.0)
 rstudioapi * 0.3.1   2015-04-07 CRAN (R 3.2.0)
 xml2         0.1.0   2015-04-20 CRAN (R 3.2.0)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30556130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档