【问题标题】:Scraping HTML (or JavaScript) Table抓取 HTML(或 JavaScript)表
【发布时间】:2023-03-29 09:45:01
【问题描述】:

我正在尝试废弃网站上的表格,但无法成功...我已经做了很多次,它总是有效,但从那时起,表格似乎是某种 Javascript ,并且解析根本不起作用?有人能帮我吗?

页面是here

我已经试过了:

readHTMLTable(doc//table[@id='live-player-home-offensive-grid'], as.data.frame=TRUE, header=FALSE)
# or
xpathSApply(pagetree, "//*/table[@id='live-player-home-offensive-grid']", xmlValue)

【问题讨论】:

    标签: javascript html r web-scraping html-table


    【解决方案1】:

    问题是数据不在表格中,而是在Javascript代码中—— 它仅在页面呈现时在您的浏览器中放入表格中。

    我没有看到一种干净的提取方法, 没有使用 Javacript 工具或 Web 浏览器控制器 (Zombie.js, CasperJS, PhantomJS, Selenium)。

    以下内容将 HTML 页面读取为字符串, 并查找initialData 变量的定义, 显然包含数据。 它以相同的难以使用的格式返回数据, 列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表列表

    library(RCurl)
    url <- "http://www.whoscored.com/Matches/411429/LiveStatistics/England-Premier-League-2010-2011-Fulham-Arsenal"
    html <- getURL(url)
    initial_data <- gsub("^.*?initialData = (.*?);.*", "\\1", html)
    initial_data <- gsub("'", '"', initial_data)
    library(RJSONIO)
    data <- fromJSON( initial_data )
    

    【讨论】:

    • 其实这很有帮助!从那时起,我可以取消列出数据,并留下一个包含我想要的所有数据的很长的向量。从那,我把它放到data.frame中,我有一个1列,5k+行的数据框。并且几乎完成了,如果有人可以帮助我做到这一点:我如何告诉 R 在转换为 data.frame 时我想要多少列?我没有成功使用“ncol”。再次,非常感谢!
    • 问题是这些列表嵌套很深,并且长度不同。可以尝试通过查看cat(toJSON(data))cat(toJSON(data[[1]]))cat(toJSON(data[[1]][[1]]))等来了解数据的结构。下面的似乎有意义且易于使用,但我可能丢弃了太多数据:lapply( data[[1]][[2]][[1]][[5]], function(u) c( "name", u[[2]], unlist( u[[4]] ) ) ) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多