3

次のコードが示すように、htmlin rvestpackage はhtmlParsefrom XMLpackage を使用します。.

html
function (x, ..., encoding = NULL) 
{
    parse(x, XML::htmlParse, ..., encoding = encoding)
}
<environment: namespace:rvest>

htmlParse
function (file, ignoreBlanks = TRUE, handlers = NULL, replaceEntities = FALSE, 
    asText = FALSE, trim = TRUE, validate = FALSE, getDTD = TRUE, 
    isURL = FALSE, asTree = FALSE, addAttributeNamespaces = FALSE, 
    useInternalNodes = TRUE, isSchema = FALSE, fullNamespaceInfo = FALSE, 
    encoding = character(), useDotNames = length(grep("^\\.", 
        names(handlers))) > 0, xinclude = TRUE, addFinalizer = TRUE, 
    error = htmlErrorHandler, isHTML = TRUE, options = integer(), 
    parentFirst = FALSE) 
.....

したがって、次の URL の場合:

 myurl<-"http://www.nepalstock.com.np/"
parse_XML<-htmlParse(myurl) #runs without error
parse_rvest<-html(myurl) # throws out the Internal Sever error
Error in parse.response(r, parser, encoding = encoding) : 
  server error: (500) Internal Server Error

何か案が?

4

1 に答える 1

3

httr::GET基になるリクエストからデフォルトのユーザーエージェントをリセットすると、機能します。

library(httr)
library(rvest)
parse_rvest <- html(myurl, add_headers("User-Agent" = "myagent"))

また

parse_rvest <- html(myurl, user_agent("myagent"))

デバッグ目的で、 に追加できることに注意してverbose()くださいhtml(...)

追加:

新しい // コンボを使用すると、rvestxml2curlようになります。

library(xml2)
library(rvest)
library(curl)
parse_rvest <- curl(myurl, handle = new_handle("useragent" = "myua")) %>%
               read_html()
于 2015-06-17T18:18:30.873 に答える