【发布时间】:2014-03-19 17:10:06
【问题描述】:
我有一个从循环中调用的函数。基本思想是加载一个 URL 列表并构建一个数据框,其中每一行是一个 URL,每一列是我感兴趣的属性。当我最初运行它时,我没有包含索引(末尾的方括号),它工作正常,直到我点击一个在页面上有多个元素的 URL。所以,我把它改成了下面的代码,没有报错,但是无论我给它多少个 URL,我的数据框中都只得到一行。
require(RCurl)
require(XML)
scrp.getDtls <- function(url){
src = getURL(url,encoding="UTF-8")
prsd = htmlParse(src)
title = xpathSApply(prsd, "//meta[@name='title']/@content")[1] #added to return first element only
brand = xpathSApply(prsd, "//meta[@itemprop='brand']/@content")[1]
model = xpathSApply(prsd, "//meta[@itemprop='model']/@content")[1]
upc = xpathSApply(prsd, "//meta[@itemprop='productID']/@content")[1]
price = xpathSApply(prsd, "//div/meta[@itemprop='price']/@content")[1]
x = data.frame(title,brand,model,upc,price)
}
urls = read.csv("urls.csv", header=FALSE)
x = NA
for(url in urls){
x = rbind(x,scrp.getDtls(url))
}
x = x[-1,]
View(x)
#CSV file partial contents
"http://www.walmart.com/ip/Suave-Naturals-Ocean-Breeze-Shampoo-22.5-oz/10293577"
"http://www.walmart.com/ip/Gillette-Fusion-Cartridges-4-count/14071267"
"http://www.walmart.com/ip/Sensodyne-Pronamel-Mint-Essence-Toothpaste-4-oz/10316819"
"http://www.walmart.com/ip/Speed-Stick-Ocean-Surf-Deodorant-3-oz/11965072"
谢谢:)
【问题讨论】:
-
您的
for循环不太正确。查看here 以获取类似的示例。
标签: r web-scraping