【问题标题】:Scraping with rvest not working properly用 rvest 刮擦不能正常工作
【发布时间】:2018-12-07 22:20:45
【问题描述】:

我想抓取此页面上的第二个主表:https://www.hockey-reference.com/players/f/forsbfi01.html,“NHL Possession Metrics”表。 Rvest 应该能让我轻松做到这一点:

fil_link <- "https://www.hockey-reference.com/players/f/forsbfi01.html"

fil_pos <- fil_link %>% 
 read_html %>% 
 html_node(css = "#skaters_advanced") %>% 
 html_table(header = T)

但我收到此错误:

Error in UseMethod("html_table") : 
  no applicable method for 'html_table' applied to an object of class 
  "xml_missing"

我得到了第一个具有基本相同代码的表,同时换掉了 css 代码。另外,我查看了表格代码,检查以确保我得到了实际的表格选择器,而不是容器、内脏等。为什么不会刮掉?

【问题讨论】:

  • 现代网页不是很容易抓取,因为大多数使用 javascript 来填充页面,而 rvest 无法执行 JavaScript。在这种情况下,该特定网页恰好也在评论块中包含一个普通表格。请务必先搜索“scrape”和您尝试抓取的网站的 URL,因为每个网站可能需要不同的技巧,并且已经为许多网站发布了解决方案。
  • 该特定表格的 html 代码未格式化为 html 表格,但是这听起来可能很矛盾。 rvest html_table 将无法将其解析为矩阵。您可能需要提取每个元素并通过自定义函数对其进行解析。
  • 啊。我知道了。谢谢
  • papelr,再问一遍。我找到了一个自定义解决方案。 @MrFlick 将此问题标记为重复,我会对此提出异议,因为您要求解析的表/html 结构与所谓的重复中存在的不等价。
  • @NicolásVelásquez 页面上的不同表格可能是技术上的问题,但提取数据将需要相同的技术。我们真的需要一个关于如何在每个网页上抓取每个表格的 SO 帖子吗?如果您能说明这有何不同,我将重新提出问题。该表似乎在评论中,就像其他问题一样。

标签: r dplyr rvest


【解决方案1】:

这将解决这个特定表的问题。 但请注意,这是一个非常脆弱的解决方案。它假设一个只有 3 行的矩阵结构,并期望所有行具有相同数量的元素。

library(tidyverse)
library(rvest)

## Create a function to parse every row in the table.
Hockey_table <- function(htmlObject) { 

  titlerow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/h4') %>%  html_text('data-tip')
  firstrow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/p[1]') %>% html_text()
  secondrow <- htmlObject %>% html_nodes(xpath = '//div[@class="stats_pullout"]/div/div/p[2]') %>% html_text()

  data.frame(titlerow, firstrow, secondrow)

}

 Page01 <- read_html('https://www.hockey-reference.com/players/f/forsbfi01.html')
Hockey_table(Page01)

结果:

   titlerow firstrow secondrow
 1   SUMMARY  2017-18    Career
 2        GP       67       331
 3         G       26       117
 4         A       38       138
 5       PTS       64       255
 6       +/-       27        26
 7        PS      8.3      32.1
 8       PIM       38       145
 9        SH      179       931
 10      GWG        6        24
 11      TOI    17:28     17:49
 12      CF%     53.0      54.9
 13     oZS%     54.1      63.4

【讨论】:

  • 我看到了脆弱性。感谢您的解决方法,谢谢!
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2019-05-09
  • 2022-09-27
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多