在R中抓取网页的问题

时间:2014-05-21 19:07:13

标签: xml r scraper httr

我尝试使用XPath抓取网页的特定位置来查找它。 路径似乎是隐藏的"因为网页的其他部分可以轻松访问,但此部分返回NULL值。

我尝试过使用过几个套餐,但我真的不是这个主题的专家,所以我无法真正评估发生了什么,以及这是否是一种解决方法它

这就是我尝试过的。

require("XML")
require("scrapeR")
require("httr")

url <- "http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537"
xp <- '//*[@id="dv_MainContainerEquiposResumen"]/div[1]/h1'

page <- scrape(url)
xpathApply(page[[1]], xp, xmlValue)
# NULL

url.get = GET(url)
xpathSApply(content(url.get), xp)
# NULL

webpage = getURL(url)
doc = htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE)
xpathSApply(doc, xp)
# NULL

2 个答案:

答案 0 :(得分:2)

您可以使用Selenium和RSelenium软件包抓取页面:

url <- "http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537"
xp <- '//*[@id="dv_MainContainerEquiposResumen"]/div[1]/h1'
require(RSelenium)
RSelenium::startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate(url)
webElem <- remDr$findElement(value = xp)
> webElem$getElementAttribute("outerHTML")[[1]]
[1] "<h1>Samsung Galaxy Core</h1>"
> webElem$getElementAttribute("innerHTML")[[1]]
[1] "Samsung Galaxy Core"
remDr$close()
remDr$closeServer()

答案 1 :(得分:1)

该部分页面似乎稍后会通过javascript添加。它不存在于页面的源中。我认为scrapeR不会评估javascript。

数据似乎来自对http://www.claro.com.ar/portal/ar/ceq/js/ceq.js?ver=1.0.0的AJAX调用。它可能正在查看引用者以了解要发送的数据。

这似乎可以获得该数据

library(RCurl)
getURL("http://www.claro.com.ar/portal/ar/ceq/js/ceq.js?ver=1.0.0",
    .opts=curlOptions(referer="http://www.claro.com.ar/portal/ar/pc/personas/movil/eq-new/?eq=537"))