R xmlValue中的参数错误是什么?
我是R的新手。我想刮取多个html页面,并创建一个数据集,其中的列通过XPath组成特定的数据。我发现了一个有用的刮刀 我的计划是遵循链接中的脚本,首先让它工作/理解,然后定制到我的网站/html/xpath 但是,当我在代码中运行第二个块(抓取博客文章)时,我得到以下错误: UseMethod(“xmlValue”)中出错: “xmlValue”没有适用于“xml_node”类对象的方法 这是中断代码的行: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,那么请使用
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,谢谢。这确实是一个艰难的组合。上面的评论提供了一个很好的解决方法。