【问题标题】:Trying to Webscrape an entire table using R, but only able to get the first line尝试使用 R 抓取整个表格,但只能获取第一行
【发布时间】:2019-04-13 07:42:51
【问题描述】:

这是我要从以下网站抓取的网站:https://www.premierleague.com/match/38413

我正在尝试获取包含 Match Stats 的表格,但是当我尝试抓取它时,我只得到第一行,其中仅包含球队名称!

这是我正在使用的代码:

library(rvest)
url <- "https://www.premierleague.com/match/38413"

my_html <- read_html(url)


tbls_ls <- my_html %>%
  html_nodes("table") %>%
  .[2] %>%
  html_table(fill = TRUE)

我不是 R 专家,所以我不太确定自己做错了什么,但希望得到帮助!

【问题讨论】:

  • 问题是“Match Stats”表是由JavaScript生成的,即rvest本身无法抓取它。您需要其他工具,例如RSelenium(很慢,很慢而且不是很稳定),PhantomJSV8
  • 很可能数据实际上不在页面中。相反,页面被加载,然后 Javscript 代码获取数据并将其注入浏览器中的页面。 R 页面函数(如 rvest 中)仅对页面执行 http GET - 它们不会在页面中运行任何脚本。
  • Mmk,我可以通过页面源获取信息吗?通过检查页面,我已经能够找到我需要的所有信息,但我不知道如何收集它们。
  • 可能重复:stackoverflow.com/questions/41496552/…(至少是同一个网站)

标签: r web-scraping


【解决方案1】:

我能够使用以下脚本提取比赛统计数据:

library(RSelenium)
library(XML)
library(RCurl)
shell('docker run -d -p 4445:4444 selenium/standalone-firefox')
remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4445L, browserName = "firefox")
remDr$open()
remDr$navigate('https://www.premierleague.com/match/38413')
remDr$screenshot(display = TRUE, useViewer = TRUE) 

# Close accept cookie
obj_Accept_Cookie <- remDr$findElement("xpath", "/html/body/div[3]/div/div/div[1]/div[5]/button[1]")
obj_Accept_Cookie$clickElement()

remDr$executeScript("scroll(0, 5000)")
remDr$executeScript("scroll(0, 15000)")

obj_Table_Stats <- remDr$findElement("xpath", "//*[@id='mainContent']/div/section[2]/div[2]/div[2]/div[1]/div/div/ul/li[3]")
obj_Table_Stats$clickElement()
remDr$screenshot(display = TRUE, useViewer = TRUE) 

page_Content <- remDr$getPageSource()[[1]]
table <- readHTMLTable(page_Content)[[3]]
table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2020-03-27
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多