R語(yǔ)言學(xué)習(xí):使用rvest包抓取網(wǎng)頁(yè)數(shù)據(jù)

rvest是R語(yǔ)言一個(gè)用來(lái)做網(wǎng)頁(yè)數(shù)據(jù)抓取的包蜈彼,包的介紹就是“更容易地收割(抓取)網(wǎng)頁(yè)”。其中html_nodes()函數(shù)查找標(biāo)簽的功能非常好用痹雅。以抓取天貓搜索結(jié)果頁(yè)的寶貝數(shù)據(jù)為例說(shuō)明rvest的使用蚀苛。

分析網(wǎng)頁(yè)

  1. 打開天貓在验,按F12鍵打開瀏覽器的開發(fā)工具。個(gè)人用的火狐堵未,誰(shuí)讓Chrom不支持linux了腋舌,唉。不過還是chrome好用啊渗蟹。其他瀏覽器都有類似的功能块饺。
  2. 隨便搜索個(gè)啥赞辩,比如核彈,我草還真出結(jié)果了授艰!
  3. 接下來(lái)辨嗽,在瀏覽器的開發(fā)工具"查看器"中查看網(wǎng)頁(yè)的源碼』刺冢或者按一下CTRL+SHIFT+C糟需,選擇任意寶貝」瘸可以看到寶貝的圖片洲押、月銷量等數(shù)據(jù)都是包含在<div class="product-iWrap">...</div>塊中的。
  4. 打開該div塊圆凰,哈哈杈帐,咱們需要的商品圖片、鏈接专钉、月銷量挑童、價(jià)格,以及商戶名稱等驶沼,都可以在里面找到了炮沐。話說(shuō),貓爹其實(shí)挺開放的回怜,沒有做太多限制大年,不然想抓這些數(shù)據(jù)就麻煩了。

接下來(lái)啟動(dòng)R玉雾,以下是用rvest包抓取寶貝數(shù)據(jù)的過程

  • 安裝rvest包
install.packages("rvest")
  • 加載rvest包
library(rvest)
  • 保存搜索鏈接到對(duì)象gurl翔试,鏈接的拼接方式挺有規(guī)律的
gurl <- "https://list.tmall.com/search_product.htm?q=%C9%AD%B1%C8%B0%C2&type=p&vmarket=&spm=875.7931836%2FB.a2227oh.d100&from=mallfp..pc_1_searchbutton"
  • 抓取數(shù)據(jù)保存到對(duì)象md中
  • %>%是管道操作符,意思是把左邊的操作結(jié)果作為參數(shù)傳遞給右邊的命令
  • div.product-iWrap 是CSS選擇器的語(yǔ)法复旬,即是 div class="div.product-iWarp"
md <- gurl %>% 
        read_html(encoding="GBK") %>% # 讀取gurl的鏈接垦缅,指定編碼為gbk
        html_nodes("div.product-iWrap")  # 篩選出所有包含在<div class="product-iWrap">...</div>塊的內(nèi)容
  • 從對(duì)象md繼續(xù)篩選,獲賣家名稱等數(shù)據(jù)驹碍。
  • html_attr("data-nick") 是從html_nodes()篩選出的標(biāo)簽中壁涎,查找data-nick屬性的值。
  • gsub()是字符串查找替換的函數(shù)志秃,pattern是指定用來(lái)查找的正則表達(dá)式怔球。
  • html_nodes("p.productTitle>a[title]"),”>"指定的篩選條件的父級(jí)標(biāo)簽。
  • html_text() 只抓取<標(biāo)簽>內(nèi)容</標(biāo)簽>中的內(nèi)容部分浮还。
# 抓取賣家昵稱和ID
sellerNick <- md %>% html_nodes("p.productStatus>span[class]") %>% 
                html_attr("data-nick")  
sellerId <- md %>% html_nodes("p.productStatus>span[data-atp]") %>% 
              html_attr("data-atp") %>% 
              gsub(pattern="^.*,",replacement="")
# 抓取寶貝名稱等數(shù)據(jù)
itemTitle <- md %>% html_nodes("p.productTitle>a[title]") %>% 
             html_attr("title")
itemId <- md %>% html_nodes("p.productStatus>span[class]") %>% 
          html_attr("data-item")
price <- md %>% html_nodes("em[title]") %>% 
         html_attr("title") %>% 
         as.numeric
volume <- md %>% html_nodes("span>em") %>% 
          html_text
# 最后保存成數(shù)據(jù)框?qū)ο蟛⒋姹P備用竟坛,以及寫入csv文件
options(stringsAsFactors = FALSE) # 設(shè)置字符串不自動(dòng)識(shí)別為因子
itemData <- data.frame(sellerNick=sellerNick,
                       sellerId=sellerId,itemTitle=itemTitle,
                       itemId=itemId,
                       price=price,
                       volume=volume)
save(itemData,file="F:/mydata/itemData.rData")
write.csv(itemData,file="F:/mydata/itemData.csv")

補(bǔ)充一個(gè)用rvest從趕集網(wǎng)抓取二手房單頁(yè)面數(shù)據(jù)的代碼

getData <- function(gurl){
# 抓取趕集網(wǎng)二手房源單頁(yè)的數(shù)據(jù)
    library(rvest)
    # 趕集網(wǎng)首頁(yè)篩選長(zhǎng)沙-雨花區(qū)-砂子塘的二手房源,獲得鏈接,o1為頁(yè)數(shù)
    # gurl <- "http://cs.ganji.com/fang5/yuhuashazitang/o1/"
    tmp <- gurl %>% html_session %>% 
           read_html(encoding="utf-8") %>% 
           html_nodes("div.f-main-list>div>div")

    # 單個(gè)房源的puid
    puid <- tmp %>% html_attr("id")
    # 單個(gè)房源的鏈接
    itemURL <-tmp %>% html_attr("href") %>% 
              gsub(pattern="/fang5",replacement="http://cs.ganji.com/fang5")
    # 縮略圖鏈接
    smallImg <- tmp %>% html_nodes("dl>dt>div>a>img") %>% html_attr("src")
    # 標(biāo)題
    iTitle <- tmp %>% html_nodes("dl>dd>a") %>% html_attr("title")
    # 戶型
    iLayout <- tmp %>% html_nodes("dl>dd[data-huxing]") %>% html_attr("data-huxing")
    # 面積
    iArea <- tmp %>% html_nodes("dl>dd[data-huxing]") %>% 
             html_attr("data-area") %>% 
             gsub(pattern="[^0-9]",replacement="")
    # 篩選朝向等數(shù)據(jù)
    iTmp <- tmp %>% html_nodes("dl>dd[data-huxing]>span") %>% html_text
    iOrientation <- iTmp[seq(from=5,to=length(iTmp),by=9)] # 提取朝向
    iFloor <- iTmp[seq(from=7,to=length(iTmp),by=9)] %>% # 提取樓層
              gsub(pattern="\n",replacement="")
    iDecoration <- iTmp[seq(from=9,to=length(iTmp),by=9)] # 提取裝修
    # 提取地址
    iAddr <- tmp %>% html_nodes("dl>dd>span.area") %>% html_text %>% 
             gsub(pattern="\n",replacement=" ") %>% 
             gsub(pattern=" ",replacement="")
    # 提取價(jià)格
    iPrice <- tmp %>% html_nodes("dl>dd>div.price>span:first-child") %>% html_text
    # 提取單價(jià)
    iTime <- tmp %>% html_nodes("dl>dd>div.time") %>% html_text %>% 
             gsub(pattern="[^0-9]",replacement="") %>% as.numeric
    # 合并數(shù)據(jù)框
    iData <- data.frame(puid=puid,
                        iLayout=iLayout,
                        iArea=iArea,
                        iPrice=iPrice,
                        iTime=iTime,
                        iDecoration=iDecoration,
                        iFloor=iFloor,
                        iOrientation=iOrientation,
                        itemURL=itemURL,
                        smallImg=smallImg,
                        iTitle=iTitle,
                        iAddr=iAddr,
                        stringsAsFactors=FALSE)
    # 返回?cái)?shù)據(jù)框
    return(iData)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末担汤,一起剝皮案震驚了整個(gè)濱河市涎跨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崭歧,老刑警劉巖隅很,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異驾荣,居然都是意外死亡外构,警方通過查閱死者的電腦和手機(jī)普泡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門播掷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人撼班,你說(shuō)我怎么就攤上這事歧匈。” “怎么了砰嘁?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵件炉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我矮湘,道長(zhǎng)斟冕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任缅阳,我火速辦了婚禮磕蛇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘十办。我一直安慰自己秀撇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布向族。 她就那樣靜靜地躺著呵燕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪件相。 梳的紋絲不亂的頭發(fā)上再扭,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音夜矗,去河邊找鬼泛范。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侯养,可吹牛的內(nèi)容都是我干的敦跌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼柠傍!你這毒婦竟也來(lái)了麸俘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惧笛,失蹤者是張志新(化名)和其女友劉穎从媚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體患整,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拜效,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了各谚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紧憾。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昌渤,靈堂內(nèi)的尸體忽然破棺而出赴穗,到底是詐尸還是另有隱情,我是刑警寧澤膀息,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布般眉,位于F島的核電站,受9級(jí)特大地震影響潜支,放射性物質(zhì)發(fā)生泄漏甸赃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一冗酿、第九天 我趴在偏房一處隱蔽的房頂上張望埠对。 院中可真熱鬧,春花似錦已烤、人聲如沸鸠窗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)稍计。三九已至,卻和暖如春裕循,著一層夾襖步出監(jiān)牢的瞬間臣嚣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工剥哑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留硅则,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓株婴,卻偏偏與公主長(zhǎng)得像怎虫,于是被迫代替她去往敵國(guó)和親暑认。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 從零開始學(xué)習(xí)rvest網(wǎng)絡(luò)爬蟲抓數(shù)據(jù)-Stone.Hou 大神 Hadley rvest in GitHub參考資...
    一筐莢果閱讀 12,139評(píng)論 0 21
  • <a name='html'>HTML</a> Doctype作用大审?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)蘸际、<...
    clark124閱讀 3,497評(píng)論 1 19
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,759評(píng)論 1 92
  • ?? 覺得和苗栗很有緣份徒扶, 以前在苗栗唸大學(xué)粮彤,但對(duì)苗栗沒有太大的感情, 在旅行社工作姜骡,偶爾兼差帶一日?qǐng)F(tuán)导坟, 為了準(zhǔn)備...
    mavis0305閱讀 226評(píng)論 0 0
  • 你是一條大白魚躺在重慶的火鍋里鮮肉翻滾多少少女為你流著口水夾著筷子爭(zhēng)先恐后大汗淋漓誓要把你的肥美分食個(gè) 干 干 凈 凈
    間崎閱讀 275評(píng)論 2 3