R xmlValue中的参数错误是什么?

R xmlValue中的参数错误是什么?,r,xml,parsing,xpath,web-scraping,R,Xml,Parsing,Xpath,Web Scraping,我是R的新手。我想刮取多个html页面,并创建一个数据集,其中的列通过XPath组成特定的数据。我发现了一个有用的刮刀 我的计划是遵循链接中的脚本,首先让它工作/理解,然后定制到我的网站/html/xpath 但是,当我在代码中运行第二个块(抓取博客文章)时,我得到以下错误: UseMethod(“xmlValue”)中出错: “xmlValue”没有适用于“xml_node”类对象的方法 这是中断代码的行: pages那个“教程”是rvest和XML的奇怪组合。如果您使用rvest,那么请使用

我是R的新手。我想刮取多个html页面,并创建一个数据集,其中的列通过XPath组成特定的数据。我发现了一个有用的刮刀

我的计划是遵循链接中的脚本,首先让它工作/理解,然后定制到我的网站/html/xpath

但是,当我在代码中运行第二个块(抓取博客文章)时,我得到以下错误:

UseMethod(“xmlValue”)中出错: “xmlValue”没有适用于“xml_node”类对象的方法

这是中断代码的行:

pages那个“教程”是
rvest
XML
的奇怪组合。如果您使用
rvest
,那么请使用该软件包中的函数,如
html\u text
xml2
包也可以与
rvest
配合使用,但不能与
XML
配合使用。来自
html
的警告消息也应该告诉您它已过期

page_data <- html(theURL)
##Warning message: 'html' is deprecated.

page_data %>%
  html_nodes(xpath='//*[@id="leftcontent"]/div[11]/span[1]') %>%
    html_text
[1] "Page 1 of 25"
page\u数据%
html_节点(xpath='/*[@id=“leftcontent”]/div[11]/span[1]')%>%
html_文本
[1] “第1页,共25页”
那个“教程”是
rvest
XML
的奇怪组合。如果您使用
rvest
,那么请使用该软件包中的函数,如
html\u text
xml2
包也可以与
rvest
配合使用,但不能与
XML
配合使用。来自
html
的警告消息也应该告诉您它已过期

page_data <- html(theURL)
##Warning message: 'html' is deprecated.

page_data %>%
  html_nodes(xpath='//*[@id="leftcontent"]/div[11]/span[1]') %>%
    html_text
[1] "Page 1 of 25"
page\u数据%
html_节点(xpath='/*[@id=“leftcontent”]/div[11]/span[1]')%>%
html_文本
[1] “第1页,共25页”

XML
视为您唯一需要的包,并使用
xpathsaply
调用:

library(XML)

theURL <- "http://www.r-bloggers.com/search/web%20scraping"    
page_data <- htmlParse(readLines(theURL, warn = FALSE))
pages <- xpathSApply(doc, '//*[@id="leftcontent"]/div[11]/span[1]', xmlValue)
pages <- as.numeric(regmatches(pages, regexpr("[0-9]+$", pages)))

scrape_r_bloggers_page <- function(doc, page){

  titles <- xpathSApply(doc, '//div[contains(@id,"post")]/h2/a', xmlValue)
  descriptions <- xpathSApply(doc, '//div[contains(@id,"post")]/div[2]/p[1]', xmlValue)
  dates <- xpathSApply(doc, '//div[contains(@id,"post")]/div[1]/div', xmlValue)
  authors <- xpathSApply(doc, '//div[contains(@id,"post")]/div[1]/a', xmlValue)
  urls <- xpathSApply(doc, '//div[contains(@id,"post")]/h2/a', xmlValue)

  blog_posts_df <- data.frame(title=titles,
                              description=descriptions,
                              author=authors,
                              date=dates,
                              url=urls,
                              page=page)    
}

blogsdf <- scrape_r_bloggers_page(page_data, 1)

blogsList <- lapply(c(2:(pages-1)), function (page) {
  Sys.sleep(1)
  theURL <- paste("http://www.r-bloggers.com/search/web%20scraping/page/",page,"/",sep="")
  page_data <- htmlParse(readLines(theURL, warn = FALSE))
  scrape_r_bloggers_page(page_data, page)
})

finaldf <- rbind(blogsdf, do.call(rbind, blogsList))
库(XML)

URL将
XML
视为您唯一需要的包,并使用
xpathsaply
调用:

library(XML)

theURL <- "http://www.r-bloggers.com/search/web%20scraping"    
page_data <- htmlParse(readLines(theURL, warn = FALSE))
pages <- xpathSApply(doc, '//*[@id="leftcontent"]/div[11]/span[1]', xmlValue)
pages <- as.numeric(regmatches(pages, regexpr("[0-9]+$", pages)))

scrape_r_bloggers_page <- function(doc, page){

  titles <- xpathSApply(doc, '//div[contains(@id,"post")]/h2/a', xmlValue)
  descriptions <- xpathSApply(doc, '//div[contains(@id,"post")]/div[2]/p[1]', xmlValue)
  dates <- xpathSApply(doc, '//div[contains(@id,"post")]/div[1]/div', xmlValue)
  authors <- xpathSApply(doc, '//div[contains(@id,"post")]/div[1]/a', xmlValue)
  urls <- xpathSApply(doc, '//div[contains(@id,"post")]/h2/a', xmlValue)

  blog_posts_df <- data.frame(title=titles,
                              description=descriptions,
                              author=authors,
                              date=dates,
                              url=urls,
                              page=page)    
}

blogsdf <- scrape_r_bloggers_page(page_data, 1)

blogsList <- lapply(c(2:(pages-1)), function (page) {
  Sys.sleep(1)
  theURL <- paste("http://www.r-bloggers.com/search/web%20scraping/page/",page,"/",sep="")
  page_data <- htmlParse(readLines(theURL, warn = FALSE))
  scrape_r_bloggers_page(page_data, page)
})

finaldf <- rbind(blogsdf, do.call(rbind, blogsList))
库(XML)

URL可能是RCurl的问题,因为XML包工作正常:
doc@Parfait谢谢。这是一段代码我完全理解我使用的代码的来源。这个错误可能是RCurl的问题,因为正如我上面所示,精确的XPath在XML中工作。@Parfait我明白了。您能建议一个解决方案使脚本工作吗?可能是RCurl的问题,因为XML包工作正常:
doc@Parfait谢谢。这是一段代码我完全理解我使用的代码的来源。这个错误可能是RCurl的问题,因为正如我上面所示,精确的XPath在XML中工作。@Parfait我明白了。你能建议一个解决方案使脚本工作吗?@Parfait,谢谢,它工作得很好。我所能建议的就是应该用page_name变量替换doc参数。此外,url Xpath正在检索标题。好极了!@冻糕,谢谢,效果很好。我所能建议的就是应该用page_name变量替换doc参数。此外,url Xpath正在检索标题。好极了!S,谢谢。这确实是一个艰难的组合。上面的评论提供了一个很好的解决方法。S,谢谢。这确实是一个艰难的组合。上面的评论提供了一个很好的解决方法。