RCurl汽車之家抓取
阿新 • • 發佈:2019-01-26
汽車之家抓取
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")