【问题标题】:web scraping a table from interactive websites using rvest使用 rvest 从交互式网站中抓取表格
【发布时间】:2019-07-24 00:59:44
【问题描述】:

我正在尝试在此交互式网页上抓取表格 https://games.crossfit.com/leaderboard/open/2019?country_champions=0&division=1&citizenship=US&citizenship_display=United+States&sort=0&scaled=0&page=1

以下是我的原始代码:

url='https://games.crossfit.com/leaderboard/open/2019?country_champions=0&division=1&citizenship=US&citizenship_display=United+States&sort=0&scaled=0&page=1'
US_male=read_html(url)%>%
  html_nodes('#leaderboard')%>%
  html_nodes('div.lb-main.container')%>%
  html_nodes('div table')

执行此操作后,它返回 {xml_nodeset (0)},但如果我将其缩短为

US_male=read_html(url)%>%
  html_nodes('#leaderboard')%>%
  html_nodes('div.lb-main.container')

返回

{xml_nodeset (1)}
[1] <div class="lb-main container"></div>

如果您检查网页,在&lt;table class="desktop athletes"&gt; 下有table body&lt;tbody&gt; 的标签。我不明白为什么表格的内容没有显示出来,我应该如何正确地抓取表格?

无论你使用 R 还是 python,我都可以学习。我会很感激的!

【问题讨论】:

    标签: python r web web-scraping rvest


    【解决方案1】:

    更简单的方法:

    使用 Rselenium(R) 或 Selenium(Python)。这两个包都使用 Selenium,您可以在其中模拟执行所有 javascript 和 AJAX 请求的浏览器。

    然后就可以下载解析后的页面源码,使用rvestBeautifulSoup解析HTML。

    更艰难的路

    在浏览器中使用开发者工具,并在 Network Tab 中检查 XHR 内容。

    例如,你想要的表格实际上是以 JSON 格式发送到你的浏览器的。

    https://games.crossfit.com/competitions/api/v1/competitions/open/2019/leaderboards?country_champions=0&division=1&citizenship=US&citizenship_display=United+States&sort=0&scaled=0&page=1

    您可以比较 URL 查询参数并直接使用 API 发出自己的请求。

    library(rvest)
    library(httr)
    url <- "https://games.crossfit.com/competitions/api/v1/competitions/open/2019/leaderboards?country_champions=0&division=1&citizenship=US&citizenship_display=United+States&sort=0&scaled=0&page=1"
    response <- httr::GET(url,user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"))
    data <- content(response,type = "application/json",as = "parsed")
    
    

    剩下的工作只是将列表转换为数据框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多