從網上查看了很多Rvest爬取網頁的博客,比較多的是爬取拉鉤的示例,我以這個示例分享下供大家參考:
library(rvest)lagou<-"https://www.lagou.com/zhaopin/qianduankaifa/" #拉鉤網址前部分#因為需要爬取很多頁的拉鉤數據,因此需要構建一個爬取數據的函數getdata<-function(url,i){url<-paste0(lagou,i,"/?filterOption=3") #構建各個頁拉鉤網址web<-read_html(url,encoding = "UTF-8") #將拉鉤網頁代碼讀取到本地;注意的是一定要設置格式,一般情況下設置為"UTF-8",如果要是設置為"UTF-8"讀取失敗一定得換成其他格式進行讀取,直到成功為止,這一點一定要切記切記啊!滿滿得淚啊
company<-web %>% html_nodes("div.company_name a") %>% html_text() %>% iconv("UTF-8","GB2312") #讀取招聘公司名稱,用html_nodes讀取存儲公司名稱的網頁代碼節點,再用html_text讀取該節點的公司名稱,至于這里的關鍵點找存儲公司名稱的節點可以自己搜搜,網上有很多介紹。這里我最想強調的還是格式問題,通過html_text讀取的公司名稱一般情況下都需要轉碼,如:iconv("UTF-8","GB2312"),特別是涉及到中文字符一定要轉碼為GB2312!job<-web %>% html_nodes("a.position_link h2") %>% html_text() %>% iconv("UTF-8","GB2312")salary<-web %>% html_nodes("div.li_b_l span.money") %>% html_text() %>% iconv("UTF-8","GB2312")demand<-web %>% html_nodes("div.li_b_l") %>% html_text() %>% iconv("UTF-8","GB2312") demand<-gsub("/n|//s+","",demand)#文本處理,將文本中的"/n"和空格刪除demand<-demand[grep(".*經驗>*",demand)] %>%strsplit(split="/")demand<-unlist(demand)degree<-demand[seq(2,length(demand),2)]year<-gsub("經驗",",",demand) %>% strsplit(split=",") %>% unlist(.) %>% .[seq(2,length(.),3)]type<-web %>% html_nodes("div.industry") %>% html_text() %>% iconv("UTF-8","GB2312") %>% gsub("/n|//s+","",.) %>% strsplit(split="/") %>% unlist()industry<-type[seq(1,length(type),2)]com_level<-type[seq(2,length(type),2)]com_leveldata.frame(company,job,salary,degree,year,industry,com_level)}final<-""for (i in 1:10) {#由于拉鉤數據在不斷更新,隔斷時間爬取多頁可能就不成功了,那就把此處的10改為1,先感受下爬到數據的喜悅 final<-rbind(final,getdata(lagou,i))}final<-final[-1,]#以下就是爬取豆瓣的結果:
新聞熱點
疑難解答