1. 程式人生 > >RCurl汽車之家抓取

RCurl汽車之家抓取

汽車之家抓取

2016年4月20日

參考:http://blog.sina.com.cn/s/blog_6f2336820102v13n.html

汽車之家抓取

library(RCurl)
## Loading required package: bitops
#install.packages("XML")
library(XML)
library(reshape)

#偽裝報頭
myheader=c(
"User-Agent"="Mozilla/5.0(Windows;U;Windows NT 5.1;zh-CN;rv:1.9.1.6",
"Accept"="text/htmal,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
, "Accept-Language"="en-us", "Connection"="keep-alive", "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7" ) #1)微型車抓取測試 a00url <- "http://www.autohome.com.cn/a00/" temp <- getURL(a00url, httpheader=myheader, .encoding = "gb2312") #轉碼 temp1 <- iconv(temp, "gb2312", "UTF-8") Encoding(temp1)
## [1] "UTF-8"
#選擇UTF-8進行網頁的解析
k <- htmlParse(temp1, asText = T, encoding = "UTF-8") #檢視doc的內容時顯示有亂碼,但沒關係,table的解析結果沒有亂碼 tables <- readHTMLTable(k, header = F) #getNodeSet(k,'//div[@class="uibox"]') #汽車公司 #getNodeSet(k,'//div[@class="h3-tit"]/text()') #汽車車型(greylink,灰色連結即非上市車型) model<-getNodeSet(k,'//a[contains(@class,"greylink")]/text()'
) #汽車車型(包含上市),這個Xpath會出現同輛車重複4次這種情況,我沒找到最好的xpath=-= model<-getNodeSet(k,'//li/h4/a/text()') class(model)
## [1] "XMLNodeSet"
#從XMLNodeSet轉化為character格式
a00 <- sapply(model, xmlValue)
class(a00)
## [1] "character"
a00 <- as.data.frame(a00)
a00$tips <- rep("a00/", length(a00$a00))

#重新命名列名
a00 <- rename(a00, c(a00="model", tips="tips"))
data1 <- a00
write.csv(a00, file = "E:\\新技術\\爬蟲\\汽車之家/微型車.csv")

#2)################各車型的URL#######################
#微型車 http://www.autohome.com.cn/a00/
#小型車 http://www.autohome.com.cn/a0/
#緊湊型車 http://www.autohome.com.cn/a/
#中型車 http://www.autohome.com.cn/b/
#中大型車 http://www.autohome.com.cn/c/
#豪華車 http://www.autohome.com.cn/d/
#MPV http://www.autohome.com.cn/mpv/
#跑車 http://www.autohome.com.cn/s/
#皮卡 http://www.autohome.com.cn/p/
#微面 http://www.autohome.com.cn/mb/
#輕客 http://www.autohome.com.cn/qk/
#小型suv http://www.autohome.com.cn/suva0/
#緊湊型suv http://www.autohome.com.cn/suva/
#中型suv http://www.autohome.com.cn/suvb/
#中大型suv http://www.autohome.com.cn/suvc/
#全尺寸suv http://www.autohome.com.cn/suvd/

series<-c("a0/","a/","b/","c/","d/","mpv/","s/","p/","mb/","qk/","suva0/","suva/","suvb/","suvc/","suvd/")

#構建urllist,若寫成function的話,貌似不需要構建urllist
urllist <- 0
for(i in 1:length(series)){
  url <- "http://www.autohome.com.cn/"
  urllist[i] <- paste0(url, series[i], sep="")
}

#構建抓取迴圈
for (i in 1:length(series)){
  url<-paste0("http://www.autohome.com.cn/",series[i],sep="")
  temp<-getURL(url,httpheader=myheader,.encoding="gb2312")
  temp1<-iconv(temp,"gb2312","UTF-8") #轉碼
  k<-htmlParse(temp1,asText=T,encoding="UTF-8") #選擇UTF-8進行網頁的解析
  model<-getNodeSet(k,'//li/h4/a/text()')
  table<-sapply(model,xmlValue) #從XMLNodeSet轉化為character格式
  table<-as.data.frame(table)
  table$tips<-rep(series[i],length(table$table))
  table<-rename(table,c(table="model",tips="tips")) #重新命名列名
  data2<-table
  data1<-rbind(data1,data2)
}

#匯出結果後再去重處理下吧.
write.csv(data1, file="E:\\新技術\\爬蟲\\汽車之家/auto全車型.csv")