R學習整理筆記(二)——用rvest包爬取獵聘網數據【R Markdown呈現】

清明假期第二天,天陰沉沉,風涼颼颼,還是窩在家繼續學R吧。。。

第一次學爬蟲,各種嘗試探索,花了三四天功夫總算扯出點模樣了。

代碼就幾行,是我各種探索後,覺得最精簡的方法了。

雖然還是有些bug沒解決,但還是先記錄下這幾天燒腦的產物吧!


本文目的:爬取獵聘網上杭州數據分析師崗位招聘【網址】的相關數據(下圖紅框中的四部分內容),並以csv表的形式導出結果。同時,用R Markdown展示爬取過程。

沒探索出如何導出html,就直接先上R Markdown截圖吧:

儘力最清晰了,但還是得下載圖片後才能看的清楚


下面介紹詳細步驟。

一、關於rvest包

一個用來做網頁數據抓取的包,包的介紹就是「更容易地抓取網頁」。

相關函數用法:

-read_html() 讀取html文檔,其輸入可以是線上的url,也可以是本地html文件。

-html_nodes() 查找標籤。本文結合SelectorGadget插件使用。

-html_text() 提取標籤內的文本。

二、準備工作

1.更新R至最新版。rvest包有些新功能需在最新版本下可用,為方便起見,一開始就更新到最新版本。代碼:

install.packages(「installr」)library(installr)updateR()

2.安裝SelectorGadget插件。用來獲得網頁中某些部分的相關標籤,若不懂HTML和CSS,強烈安利這個插件。插件的使用可參考R爬蟲小白實例教程 - 基於rvest包。我用的SelectorGadget插件+UC瀏覽器,親測可行哦!

三、開始R爬蟲

1.載入rvest包

install.packages(『rvest』)library(『rvest』)library(xml2)

2.處理網頁地址

第1頁:https://www.zhipin.com/c101210100-p100511/?page=1&ka=page-1

第10頁:https://www.zhipin.com/c101210100-p100511/?page=10&ka=page-10

觀察地址,發現地址有規律可循。可由如下框架構成:

[https://www.zhipin.com/c101210100-p100511/?page=]+[i]+[&ka=page-]+[i]

地址中,只有頁面i在變動,其餘均固定,所以後續通過設定循環來抓取全部頁面信息。

3.抓取數據

#for循環,抓取第1到10頁數據 i<- 1:10 for( i in 1:10){webpage <- read_html(str_c(「https://www.zhipin.com/c101210100-p100511/?page=」,i,「&ka=page-」,i,sep=「」))#抓取招聘職位job,公司company,薪資salary,基本信息info #%>%是管道操作符,意思是把左邊的操作結果作為參數傳遞給右邊的命令job <- html_nodes(webpage,『.job-title』)%>%html_text()company<- html_nodes(webpage,『.company-text a』)%>%html_text()salary <- html_nodes(webpage,『.red』)%>%html_text()info<- html_nodes(webpage,『.info-primary p』)%>%html_text()#保存成數據框對象bossdata <- data.frame(company,job,salary,info)}

四、導出數據

write.csv(bossdata,file=「C:/Users/Administrator/Desktop/boss.csv」)

導出的原生態數據表:

到這一步,爬蟲過程就結束啦!看到結果的瞬間有點點小激動!

但是,細看爬到的數據,有點懵,一共應該是爬到10頁*30條/頁=300條的數據,為啥最後只得到60條數據。而且,這60條數據(如下)還是第10頁的30條數據又重複了一遍的得到的。。。

第1-30條記錄

第31-60條記錄。扎心了,和上面1-30竟然一模一樣!

基於這個問題,我研究了N久的循環,百度到吐都沒解決。。棄了棄了。。節後找大神問問看吧。要學的東西很多,不弔死在這顆小草上了。。


附上R Markdown文檔的源代碼吧:

---title: "用R的rvest包爬取獵聘網數據"author: "Cynthia"date: "2018年4月6日"output: html_document---————————第一次嘗試R爬蟲,用R Markdown記錄下————————##一、關於rvest包 一個用來做網頁數據抓取的包,包的介紹就是「更容易地抓取網頁」。 相關函數用法: -**read_html()** 讀取html文檔,其輸入可以是線上的url,也可以是本地html文件。 -**html_nodes()** 查找標籤。本文結合SelectorGadget插件使用。 -**html_text()** 提取標籤內的文本。 ##二、準備工作 -**更新R至最新版**。rvest包有些新功能需在最新版本下可用,為方便起見,一開始就更新到最新版本。代碼: install.packages("installr") library(installr) updateR() -**安裝SelectorGadget插件**。用來獲得網頁中某些部分的相關標籤,若不懂HTML和CSS,強烈安利這個插件。插件的使用可參考[R爬蟲小白實例教程 - 基於rvest包](https://zhuanlan.zhihu.com/p/27782253)。我用的SelectorGadget插件+UC瀏覽器,親測可行哦! ##三、開始R爬蟲###1.載入rvest包install.packages(rvest) library(rvest) library(xml2) ###2.處理網頁地址 第1頁:https://www.zhipin.com/c101210100-p100511/?page=1&ka=page-1 第10頁:https://www.zhipin.com/c101210100-p100511/?page=10&ka=page-10 觀察地址,發現地址有規律可循。可由如下框架構成: [https://www.zhipin.com/c101210100-p100511/?page=]+[i]+[&ka=page-]+[i] 地址中,只有頁面i在變動,其餘均固定,所以後續通過設定循環來抓取全部頁面信息。 ###3.抓取數據 **#for循環,抓取第1到10頁數據** i<- 1:10 for( i in 1:10) {webpage <- read_html(str_c("https://www.zhipin.com/c101210100-p100511/?page=", i,"&ka=page-",i,sep="")) **#抓取招聘職位job,公司company,薪資salary,基本信息info** **#%>%是管道操作符,意思是把左邊的操作結果作為參數傳遞給右邊的命令** job <- html_nodes(webpage,.job-title)%>%html_text() company<- html_nodes(webpage,.company-text a)%>%html_text() salary <- html_nodes(webpage,.red)%>%html_text() info<- html_nodes(webpage,.info-primary p)%>%html_text() **#保存成數據框對象** bossdata <- data.frame(company,job,salary,info)} ##四、導出數據 write.csv(bossdata,file="C:/Users/Administrator/Desktop/boss.csv")

推薦閱讀:

NodeJs爬蟲抓取古代典籍,共計16000個頁面心得體會總結
xpath+mongodb抓取伯樂在線實戰
零基礎,教您網頁數據抓取
爬蟲代碼改進(二)|多頁抓取與二級頁面

TAG:網頁爬蟲 | R編程語言 | Markdown |