我有一个类似如下的R脚本:
id <- "25731"
url_name <- "Cross_Ange:_Tenshi_to_Ryuu_no_Rondo"
library(rvest)
html_content <- html(paste("http://myanimelist.net/anime/", id, "/", url_name, "/stats", sep=""))
test_page <- html_node(html_content, "div")该test_page变量只是用于检查页面是否正确加载。问题是有时它不会。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html style="height:100%">
<head>
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>
<body style="margin:0px;height:100%"><iframe src="/_Incapsula_Resource?CWUDNSAI=9&xinfo=6-12427765-0%200NNN%20RT(1427731440619%201)%20q(0%20-1%20-1%20-1)%20r(0%20-1)%20B12(4,315,0)&incident_id=124002150019133827-71376390758075766&edet=12&cinfo=04000000" frameborder="0" width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 124002150019133827-71376390758075766</iframe></body>
</html>这是错误的HTML内容。甚至在错误的内容中也不一致。有时它会返回另一个错误的页面。
URL本身是正确的,因为如果我尝试用Firefox发送HTTP请求,它在第一次尝试时会像预期的那样返回正确的HTML。
奇怪的是,如果我尝试使用html()函数多次运行这行代码,最终它会加载正确的HTML页面,而我没有做任何更改。这是奇怪的不一致,当我试图用RScript自动化执行时,这是可怕的。
我已经设置了一个while循环来检查HTML是否正确加载(如果它使用html_node()找到任何div标记),但是RScript抛出一个错误,而RStudio可以很好地执行它:
Error in as.vector(x, "list") :
cannot coerce type 'environment' to vector of type 'list'
Calls: html_node ... <Anonymous> -> lapply -> as.list -> as.list.default
Execution halted总而言之,RStudio有一个不一致的html()函数,它有时会返回一个奇怪的页面,但是如果我可以通过反复尝试执行这一行来强行通过它,它最终还是可以工作的。但是RScript直接抛出了一个错误。
R版本3.1.3 (2015-03-09) --“平滑人行道”
发布于 2016-06-27 09:30:48
您正在尝试加载的网站使用了一种名为Incapsula (www.incapsula.com)的服务。它阻止机器人访问其内容。
发布于 2016-09-23 22:33:53
这对我来说是可行的吗?
version R version 3.3.1 (2016-06-21)
system x86_64, linux-gnu
ui RStudio (0.99.903)
language (EN)
collate en_US.UTF-8
tz <NA>
date 2016-09-23
u <-'http://myanimelist.net/anime/25731/Cross_Ange:_Tenshi_to_Ryuu_no_Rondo/stats'
a <- html(u)
b <- (html_nodes(a,"#content table")) %>% html_table(fill = T)
colnames(b[[4]]) <- b[[4]][1,] %>% unlist %>% as.character
b[[4]] <- b[[4]][2:nrow(b[[4]]),]
> head(b[[4]])
=== =============== ===== ============= ======== ==============
\ Member Score Status Eps Seen Activity
=== =============== ===== ============= ======== ==============
2 Kirito_Kun36 7 Completed 25 / 25 11 minutes ago
3 StargazerM - On-Hold - / 25 14 minutes ago
4 Frosti_Limbu - Plan to Watch 21 minutes ago
5 ShadowGekko - Plan to Watch 37 minutes ago
6 meedly - Watching 12 / 25 39 minutes ago
7 cowboyninjabear 5 Completed 25 / 25 55 minutes ago
=== =============== ===== ============= ======== ==============https://stackoverflow.com/questions/29351481
复制相似问题