
R語言爬蟲初嘗試-基于RVEST包學習
在學完coursera的getting and Cleaning data后,繼續學習用R弄爬蟲網絡爬蟲。主要用的還是Hadley Wickham開發的rvest包。再次給這位矜矜業業開發各種好用的R包的大神奉上膝蓋
查閱資料如下:
rvest的github
rvest自身的幫助文檔
rvest + CSS Selector 網頁數據抓取的最佳選擇-戴申: 里面有提及如何快速獲得html的位置??赐赀@篇,想想我之前看代碼看半天分段真是逗比。。經測試,遨游瀏覽器,右鍵,審查元素可以得到類似結果。戴申的blog里面還有若干相關文章,國內RVEST資料基本就靠他的BLOG了,感激!
言歸正傳,拿了幾個網頁練手。包括對拉勾網爬了一下蟲,還嘗試了對國外某黃頁爬蟲,對ebay用戶評價爬蟲分析其賣家賣的東西主要在哪個價格段(我查的那個賣家,賣8.99和39.99最多,鞋子類),做了一下文本挖掘,還有爬了一下股票數據,基金買入情況等等。
之所以放拉勾網為例子,因為這個大家都比較熟一點?其他的都有點小眾=_=而且雖然我沒有跳槽的心,但年初卻是很多人跳槽的熱點。另外,因為之前聽人說過,要了解一個公司的動態,有一個辦法是去看這個公司放出來的招聘崗位,可以知道他們最近哪個業務線要擴張了,哪個業務線要跑人了,以及了解技術需求。
rvest基礎語法:
library(rvest)
lagou<-"http://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&spc=2&pl=&gj=&xl=&yx=&gx=&st=&labelWords=&lc=&workAddress=&city=%E6%B7%B1%E5%9C%B3&requestId=&pn=3"
web<-html(lagou,encoding="UTF-8") #讀取數據,規定編碼
#之前我是用關鍵字搜索,閱讀html代碼,獲得html_nodes里需要什么屬性,不過許多瀏覽器有開發者工具,可以直接獲得層級信息。如遨游
position<-web %>% html_nodes("li div.hot_pos_l a") %>% html_text()
#上面就是直接讀取數據,獲得位置信息
#不過在后面做其他網站時發現,有時候信息儲存在同類數據里(如div沒有class等等),建議是找一個大的分類,先獲得表格信息,再做數據
list_lagou<-web %>% html_nodes("li.clearfix")
#這里正確找準正確的劃分點很重要。有<li class="odd clearfix">,其實用li.clearfix一樣可以取(對于空格二選一,如"li.odd"或者"li.clearfix")
#接下來的company/position照選即可,因為事先已經分好了list,所以每一個出多少心里有數。。
在講完原理之后,現在開始嘗試寫代碼
因為里面涉及太多的選取數據工作。為了避免出現太多變量,我最后是編了一個函數,輸出數據庫
函數部分
#下面開始寫代碼,首先寫一個函數getdata,會輸出一個數據框
getdata<-function(page,urlwithoutpage){
url=paste0(urlwithoutpage,page) #這里輸入拉勾網沒有頁碼的url
web<-html(url,encoding="UTF-8") #讀取數據,規定編碼,access用
list_lagou<-web %>% html_nodes("li.clearfix") #獲得一個清單,15個職位
title<-list_lagou %>% html_nodes("div.hot_pos_l div.mb10 a")%>%html_text()
company<-list_lagou %>% html_nodes("div.hot_pos_r div.mb10 a")%>%html_text()
link<-gsub("\\?source\\=search","",list_lagou %>% html_nodes("div.hot_pos_l div.mb10 a")%>%html_attr("href"))
#接下來的由于數據都存在span里,沒有很好的劃分。這個取數要復雜一些。我在這里,研究他們的表,先取15個完整list,然后用seq等序列取數
#之后要研究是否有更好的方法
#如果有table,可以直接用data.table取數更快。。。
temp<-list_lagou %>% html_nodes("div.hot_pos_l span")
city<-temp[seq(1,90,by=6)] %>% html_text()
salary<-gsub("月薪:","",temp[seq(2,90,by=6)]%>% html_text())
year<-gsub("經驗:","",temp[seq(3,90,by=6)]%>% html_text())
degree<-gsub("最低學歷:","",temp[seq(4,90,by=6)]%>%html_text())
benefit<-gsub("職位誘惑:","",temp[seq(5,90,by=6)]%>% html_text())
time<-temp[seq(6,90,by=6)]%>%html_text()
data.frame(title,company,city,salary,year,degree,benefit,time,link)
}
然后是使用該函數,我這里就爬兩頁
#使用該函數,
library(rvest)
url<-"http://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?kd=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&spc=2&pl=&gj=&xl=&yx=&gx=&st=&labelWords=&lc=&workAddress=&city=%E6%B7%B1%E5%9C%B3&requestId=&pn="
final<-data.frame()
for (i in 3:5){
final<-rbind(final,getdata(i,url))
} #定義個數,把上面的getdata得到的Data.frame合并
head(final)
上面完成了第一個列表。爬出效果如圖
關于這個數據有什么用呢…… 簡單來說,我們可以用它來看這個網上有多少在招的,各公司招人的比例,以及薪資水平,做一點基礎的數據分析。
雖然我現在不跳槽,不過了解一下市場狀況也是不錯的~譬如見下圖,從目前這網上的平均薪資與工作年限的關系來看,數據分析崗至少在職位前五年屬于薪資增長期,初始漲得快,后面漲得慢,但平均應有13%左右的增長?然后這網上目前沒有什么高級崗位開出來(工作5-10年的崗位很少),反而是有些公司搞錯分類,放了一堆數據錄入的到數據分析欄目。。。
值得一提的是,因為數據分析這個類目里包含了不同的類別,如數據錄入的也被歸到數據分析,還有高薪也被歸到這里,所以不能完全按這個做參考。不過這個研究讓我深刻體會到了爬蟲的有效性!好玩!實用!可以用到工作中去:) 還可以像個獵頭一樣了解人才市場~~做個有情調的數據分析師~~
另外,其實我們還可以遍歷JD,看近期是什么技術最吃香,是R還是Python還是SQL還是SAS還是別的啥啥啥。下面是我隨機抽了個JD做的爬蟲??梢灾苯幽玫较嚓P數據。
final[1,9]
## [1] http://www.lagou.com/jobs/378361.html
## 45 Levels: http://www.lagou.com/jobs/113293.html ...
url<-as.character(final[1,9])
w<-html(url,encoding = "UTF-8")
d<-w %>% html_nodes("dd.job_bt p") %>% html_text()
d
## [1] "1.金融、計算機、財務、經濟相關專業;"
## [2] "2.有證券從業資格證者優先;"
## [3] "3.想從事文職類工作,對辦公軟件熟悉;"
## [4] "4.可接收已拿到學歷證的應屆畢業生。"
## [5] "<U+00A0>"
注意事項:
對于被編碼保護的數據(如國外yellow.local.ch,email被編碼保護了。需要用 decodeURIComponent函數反編譯。)
xpath語句對html_nodes適用。但是它好像是全局語句。。就是如果用div[1]//span[4]取數的話,它直接就只出全局的那個結果。。。
如
取數,可以用li.da或者li.daew取數,兩者等價
正則表達式很有用??!尤其是對網頁數據,某些不會寫,或者技術高超不愿意被我們爬蟲的工程師,用rvest去抓數據,會抓到一堆堆亂碼= =這幾天練習下來感受到了無盡惡意
中文,html(data,encoding='UTF-8')還有iconv(data,'utf-8','gbk')可以有效避免大部分亂碼。但是R對中文支持真的很渣。
rvest對于靜態抓取很方便!但是對于腳本訪問的網頁,還需要繼續學習RCurl包。備查資料如下:
javascript數據提取-RCurl包-戴申: 介紹對腳本解析后抓取數據經驗
RCurl提取統計之都論壇數據演示-medo
等學會了再寫總結。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25