使用R从连续URL中进行Web抓取

时间:2014-06-11 03:06:33

标签: r

我正在尝试从列出多个产品评级的网站中删除数据。所以,假设一个产品有800个品牌。因此,每页有10个品牌,我需要从8页废弃数据。例如:这是婴儿护理的数据。我需要24页的品牌 - http://www.goodguide.com/products?category_id=152775-baby-care&sort_order=DESC#!rf%3D%26rf%3D%26rf%3D%26cat%3D152775%26page%3D 1 %26filter%3D%26sort_by_type%3Drating%26sort_order%3DDESC%26meta_ontology_node_id%3D

我使用粗体字体为1,因为当我们从一个页面移动到另一个页面时,这是唯一一个在此URL中发生变化的东西。所以,我认为在R中写一个循环可能是直截了当的。但我发现,当我转到第2页时,页面不会再次加载。相反,只需在大约5秒钟内更新结果。但是,R不等待5秒,因此,我从第一页获得了26次数据。

我也尝试直接输入第2页网址并在没有循环的情况下运行我的代码。同样的故事 - 我得到了第1页的结果。我相信我不可能是唯一面对这一点的人。任何帮助表示赞赏。我附上了代码。

万分感谢。我希望我的问题很清楚。

# build the URL

N<-matrix(NA,26,15)
R<-matrix(NA,26,60)

for(n in 1:26){

url <- paste("http://www.goodguide.com/products?category_id=152775-baby-care&sort_order=DESC#!rf%3D%26rf%3D%26rf%3D%26cat%3D152775%26page%3D",i,"%26filter%3D%26sort_by_type%3Drating%26sort_order%3DDESC%26meta_ontology_node_id%3D")


raw.data <-readLines(url)

Parse <- htmlParse(raw.data)

#####
A<-querySelector(Parse, "div.results-container")

#####
Name<-querySelectorAll(A,"div.reviews>a")
Ratings<-querySelectorAll(A,"div.value")

N[n,]<-sapply(Name,function(x)xmlGetAttr(x,"href"))
R[n,]<-sapply(Ratings,xmlValue)
}

1 个答案:

答案 0 :(得分:0)

参考html源代码显示您想要的网址可以简化为此结构:

http://www.goodguide.com/products?category_id=152775-baby-care&page=2&sort_orde‌​r=DESC.

这些网址的内容由R按预期检索。

请注意,您也可以直接进入:

u <- sprintf('http://www.goodguide.com/products?category_id=152775-baby-car‌​e&page=%s&sort_order=DESC', n)
Parse <- htmlParse(u)