从以下网页抓取淘宝名称和价格:
##http://spu.taobao.com/spu/3c/det ... 341228&cat=1101
##http://spu.taobao.com/spu/3c/det ... 228104&cat=1101
(源码来自http://www.bassary.com/?p=1105)
按照以下代码抓取淘宝数据运行成功:
library(XML)
i_url=getURL("http://spu.taobao.com/spu/3c/detail.htm?spuid=203228104&cat=1101")
#i_url=getURL("http://spu.taobao.com/spu/3c/detail.htm?spuid=205341228&cat=1101");
i_url2<-htmlParse(i_url,asText=TRUE,encoding="UTF-8")#读取html数据
name<- getNodeSet(i_url2,"//div[@id='content']//div[@class='hd']//h1")#通过xpath找到网页中的name,注意路径中的单引号
name_text_tmp<-xmlValue(name[[1]])#提取name的内容
price<-getNodeSet(i_url2,"//div[@class='idec-shop-info']//span[@class='price']")#通过xpath找到网页中的price
price_text_tmp<-xmlValue(price[[1]])#提取price的内容
name_text<-name_text_tmp
price_text<-price_text_tmp
data.frame(name=name_text,price=price_text)
结果:
name price
1 Apple/1 MacBook Air MD231CH/A ¥7093
但当我需要同时搜寻两个网页时,运行结果为空,代码如下
read_taobao<-function(url){
#name_text<-""
#price_text<-""
i<-1
for(i_url in url){
i_url2<-htmlParse(i_url,asText=TRUE,encoding="UTF-8")#读取html数据
name<- getNodeSet(i_url2,"//div[@id='content']//div[@class='hd']//h1")#通过xpath找到网页中的name,注意路径中的单引号
#xpath://任意位置的 @是属性
name_text_tmp<-xmlValue(name[[1]])#提取name的内容
price<-getNodeSet(i_url2,"//div[@class='idec-shop-info']//span[@class='price']")#通过xpath找到网页中的price
price_text_tmp<-xmlValue(price[[1]])#提取price的内容
name_text<-name_text_tmp
price_text<-price_text_tmp
i<-i+1
print(name_text_tmp)
print(price_text_tmp)
}
data.frame(name=name_text,price=price_text)
}
url1="http://spu.taobao.com/spu/3c/detail.htm?spuid=205341228&cat=1101"
url2="http://spu.taobao.com/spu/3c/detail.htm?spuid=203228104&cat=1101"
url<-c(url1,url2)
read_taobao(url)
运行结果:
[1] NA
[1] NA
[1] NA
[1] NA
name price
1 <NA> <NA>
2 <NA> <NA> |