先简单说一下做这个抓取的思路:
1、用DD函数抓取商品名称;
2、抓取列表页“http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index”=i,i=1,2,……中的全部商品的url(大概一个列表页有25个url)
3、用DD函数解析i个列表页上抓取出来的25*i个url的商品名称,最后写到数据表df中。
在抓取dangdang数据时,遇到几个问题,请大侠指导一下:
1、做循环抓取i个列表页时,出现以下错误:
错误: XML content does not seem to be XML, nor to identify a file name 'http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index=1
http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index=2
http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index=3
http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index=4'
应该是无法解析吧,怎么能加一个判断,直到解析页面后再继续抓取这个列表页中商品链接呢?
2、最后得到的数据表df好像格式上有些问题。
脚本如下:
<br />
library(XML)<br />
DD<-function(url){<br />
url <- htmlParse(url,encoding="GBK")<br />
name <- getNodeSet(url,"//div[@class='head'][@name='Title_pub']//h1")<br />
name_text_tmp<-xmlValue(name[[1]])<br />
name_text_tmp<-iconv(name_text_tmp,"UTF-8","gbk")<br />
return(name_text_tmp)<br />
}</p>
<p>i <- seq(1,4,1)<br />
for(url_i in i){<br />
url_i <- paste("http://category.dangdang.com/all/?category_path=01.00.00.00.00.00&page_index=",i,sep = "")<br />
url_i <- htmlParse(url_i,encoding="GBK")<br />
nodes_i <- getNodeSet(url_i,"//div[@class='listitem pic']//a[@href]")<br />
Product_linkings_i <- sapply(nodes_i, function(x) xmlGetAttr(x, "href"))<br />
Sys.sleep(3)<br />
}<br />
df <- list()<br />
for(i in Product_linkings_i) df[i] <- DD(i)<br />
r <- do.call(rbind,df)<br />
</p>