【问题标题】:R crashing on readHTMLTable call to wikipediaR 在 readHTMLTable 调用维基百科时崩溃
【发布时间】:2012-09-11 14:44:45
【问题描述】:

试图抓取维基百科页面,我以前做过很多次这样的事情

library(XML)
myURL <- "http://en.wikipedia.org/wiki/List_of_US_Open_MenUs_Singles_champions"
y <- readHTMLTable(myURL,  stringsAsFactors = FALSE)

R 在 RStudio 或标准 GUI 中崩溃

其他类似问题的 SO cmets 建议使用 readLines

u=url(myURL)
readLines(u) #  cannot open: HTTP status was '404 Not Found'

url实际上是重定向的所以输入最终的url

myURL <- "http://en.wikipedia.org/wiki/List_of_US_Open_Men%27s_Singles_champions"

这次 readLines 确实输出了页面,但是使用 XML 函数,包括 htmlParse,仍然会导致崩溃

TIA

【问题讨论】:

  • XML 包中确实存在一个错误,可能在RS_XML_ParseTree 中,正如@benbolker 在对我的回答的评论中指出的那样。

标签: r web-scraping


【解决方案1】:

我发现 httr 包对于解决任何网络抓取问题都非常宝贵。在这种情况下,您需要添加用户代理配置文件,因为如果您不这样做,维基百科会阻止内容:

library(httr)
library(XML)
myURL <- "http://en.wikipedia.org/wiki/List_of_US_Open_Men%27s_Singles_champions"
page <- GET(myURL, user_agent("httr"))
x <- readHTMLTable(text_content(page), as.data.frame=TRUE)
head(x[[1]])

产生这个:

  US Open Men's Singles Champions                                                          NA
1                Official website                                                        <NA>
2                        Location                        Queens – New York City United States
3                           Venue                USTA Billie Jean King National Tennis Center
4                  Governing body                                                        USTA
5                         Created 1881 (established)Open Era: 1968\n(44 editions, until 2011)
6                         Surface  Grass (1881–1974)HarTru (1975–1977)DecoTurf (1978–Present)

【讨论】:

  • 是的,尽管我可以通过 OP 代码的分段错误确认崩溃,这表明某处存在真正的错误(RS_XML_ParseTree 是最近的原因......)。可能值得给维护者发一封电子邮件。
  • @BenBolker 对不起,是的。我还可以确认原始代码在我身上崩溃了,因此使用httr 至少返回了一些结果。
  • @Andrie。谢谢我会检查httr。奇怪的是 v 相似的 URL 不会导致崩溃 en.wikipedia.org/wiki/…
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 2018-03-24
  • 2011-08-31
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多