R Web抓包无法读取所有URL表

时间:2019-07-13 20:50:42

标签: r web-scraping rvest rcurl

我正尝试从以下链接中抓取一些表格: 'https://www.pro-football-reference.com/boxscores/201209050nyg.htm' 从尝试多种方法/程序包可以看出,我认为R无法读取整个url。这是我做过的一些尝试:

a <- getURL(url)
tabs <- readHTMLTable(a, stringsAsFactors = T)

x <- read_html(url)
y <- html_nodes(x,xpath= '//*[@id="div_home_snap_counts"]')

我已经成功使用这两种方法读取了前两个表,但是此后无论使用xpath还是css,我都无法读取其他任何表。有谁知道为什么我无法在后面的这些表中阅读?

1 个答案:

答案 0 :(得分:2)

如果您使用的浏览器是Chrome,则可以进入设置并禁用JavaScript。然后,您将看到仅存在几个表。其余的需要运行javascript才能加载。当您使用当前方法时,不会像浏览器中显示的那样加载那些。可能的解决方案是:

  1. 使用类似RSelenium的方法,该方法将允许javascript运行
  2. 检查页面的HTML,以查看信息是否存储在其他位置并可以从那里获取。有时,信息是从script标记中检索到的,例如,将其存储为json / javascript对象
  3. 刷新页面时监视网络流量(按F12键打开开发工具,然后单击“网络”选项卡),查看是否可以找到从中加载其他内容的源。您可能会找到其他可以使用的端点。

看该页面,似乎这些丢失的表中的至少两个(可能全部)实际上存储在返回的html的注释中,并与具有类placeholder的div相关联;并且您需要删除注释标记,或使用允许解析注释的方法。据推测,当javascript运行时,这些注释将转换为显示的内容。

这是html中的示例:

@alistaire看此answer,一种方法如下(如上图所示为单个示例表)

library(rvest)

h <- read_html('https://www.pro-football-reference.com/boxscores/201209050nyg.htm')

df <- h %>% html_nodes(xpath = '//comment()') %>%   
  html_text() %>%  
  paste(collapse = '') %>%   
  read_html() %>%  
  html_node('#game_info') %>%   
  html_table()