【问题标题】:Scraping website with R: XML content does not seem to be XML用 R 抓取网站:XML 内容似乎不是 XML
【发布时间】:2016-07-01 01:20:45
【问题描述】:

我正在尝试从网站 (https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks) 上抓取表格,但我尝试了多种方法均未成功。当我运行下面的代码时,我收到以下错误:XML content does not seem to be XML

library("XML")
library("RCurl")

readHTMLTable("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")

以下使用RCurl 的方法均无效:

rts.url <- getURL("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")
xmlParse(rts.url)
xmlInternalTreeParse(rts.url)
readHTMLTable(rts.url)

httr 没有成功:

library("httr")
GET("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")

rvest 没有成功:

library("rvest")
read_html("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")

我对 RSelenium 不太熟悉,但这是我根据文档中的示例进行的尝试:

library("RSelenium")

startServer()
remDr <- remoteDriver$new()
remDr$open()
remDr$navigate("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")

Error:   Summary: UnknownError
 Detail: An unknown server-side error occurred while processing the command.
 class: org.openqa.selenium.UnsupportedCommandException

【问题讨论】:

  • 数据是用jQuery加载的,所以你需要用可以运行它的东西来加载页面,比如RSelenium。
  • 刚刚添加了使用 RSelenium 的尝试(不太熟悉,但根据文档中的示例仍然会出错)。非常感谢任何帮助,谢谢!
  • 我设法获得了一个带有 rvest::html 的 xml,即使它给出了一个警告,指出 rvest::html 已被弃用......我也没有收到 xml2::read_html 的错误...
  • 我没有得到 rvest 或 xml2 的错误,但我也没有得到页面上的表格。

标签: r xml web-scraping screen-scraping rselenium


【解决方案1】:

对于诸如此类的棘手表格,我经常发现从 Firebug 或开发者工具中查找 xpath 通常是最有用的选项。

library("RSelenium")

startServer()
remDr <- remoteDriver$new()
remDr$open()
remDr$navigate("https://www.freedraftguide.com/fantasy-football/rankings/quarterbacks")
player_table <- remDr$findElement('xpath', '/html/body/div[2]/div[3]/table/tbody')

print(player_table$getElementText())

players <- strsplit(player_table$getElementText()[[1]], "\n")

final <- c()
for(x in players[[1]]){
  temp <- unlist(strsplit(x, " "))
  final <- rbind(final, temp)
}

final <- data.frame(final)

R> print(head(final))
  X1      X2             X3  X4 X5 X6   X7 X8 X9 X10 X11 X12
1 1.   Aaron        Rodgers GNB  4 39 4391  0  2 311  54  27
2 2.     Cam         Newton CAR  7 33 3982  0  9 651 130  27
3 3.  Andrew           Luck IND 10 36 4769  0  2 283  60  26
4 4.    Drew          Brees NOR  5 33 4925  0  1  41  26  22
5 5.     Ben Roethlisberger PIT  8 35 4916  0  0  43  31  20
6 6. Russell         Wilson SEA  5 34 4063  0  4 592 109  20

我意识到for 循环不太理想,但有时对于抓取此类网页而言,它可能是最佳选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2012-09-24
    • 2021-02-25
    • 2020-07-20
    相关资源
    最近更新 更多