前言
以前覺得爬蟲就是要很會寫程式才能做的事,但這個暑假實習時需要用到爬蟲,不得不自己學,而我本身用R,網路看別人的分享文發現沒那麼難,不需要很會寫程式,簡易的爬蟲很快就可以上手了。多簡單呢?就算第一次用R也看得懂! 就讓我們看下去吧。
這篇介紹四個部分:
1.安裝並執行rvest套件
2.安裝SelectorGadge CSS選擇器&選擇要爬取的網站內容
3.1開始寫R爬取你要的網頁資訊-爬新聞標題
這篇介紹四個部分:
1.安裝並執行rvest套件
2.安裝SelectorGadge CSS選擇器&選擇要爬取的網站內容
3.1開始寫R爬取你要的網頁資訊-爬新聞標題
3.2 想爬新聞標題的超連結
4.magrittr介紹-讓你程式碼更簡潔的好用套件
首先我們需要安裝爬蟲的套件 rvest。
每行程式碼的說明會附在程式碼的#後面,複製是不會執行的。
1.安裝並執行rvest套件
install.packages('rvest') #安裝rvest套件 library(rvest) #開啟rvest套件
2.安裝SelectorGadge
CSS選擇器&選擇要爬取的網站內容
這是一個可以讓你點選你要爬網頁上甚麼資訊的好用小軟體,
SelectorGadge安裝連結。
接著以自由電子報棒球版為選擇示範,
Step1.點選右上角的放大鏡SelectorGadge工具 |
Step2.我想要抓中間的主要新聞的標題,點一下標題會顯示成綠色和黃色的,表示你有選到 |
Step3.若不想要抓的右上角的熱門新聞,點一下就會顯示紅色,表示不會抓到。
Step4.看到下面的紅框處有程式碼,這就是很重要你等下會用到的程式碼,複製他。
Step5.要重新選擇,按Clear,要關掉選擇模式,按右邊的叉叉。 |
3.1開始寫R爬取你要的網頁資訊-爬新聞標題
title=read_html("http://sports.ltn.com.tw/baseball") #輸入你要爬取網頁的網址,爬取此網頁的html資訊 title=html_nodes(title,".boxTitle .listA .list_title") #函數首先代入剛剛的網頁資訊,逗號後就是很重要的輸入你前面使用Selector複製的程式碼,他會從此網頁中篩選出剛剛你想要爬的新聞標題。 title=html_text(title) # 只篩選出文字 title=iconv(title,"UTF-8") #若是文字出現亂碼,將格式改成可以辨識的形式
#來看看跑出的結果 title [1] "中職》鋒哥引退好風光 日韓敵人跨海祝福" [2] "中職》向陳金鋒致敬 Lamigo宣布52號退休" [3] "中職》發表引退感言 陳金鋒:我愛你們!" [4] "中職》林哲瑄:好希望鋒哥把球打來我這邊" [5] "中職 Live》陳鏞基本季第20轟 統一11:6擊敗兄弟" [6] "中職Live》鋒哥引退賽完美落幕 犀牛13:9猿" [7] "中職》鋒哥引退賽 4支0、3K抱憾收場" [8] "中職》高國輝最速百轟 桃園球場貢獻第2多" [9] "MLB》向洋基球迷說拜拜 老爹:跪求噓爆我" [10] "中職》二壘審跑壘卡位「被觸殺」 統一獅雙盜壘離奇得分"3.2 想爬新聞標題的超連結-
url=read_html("http://sports.ltn.com.tw/baseball") #爬取同一個網頁 url=html_nodes(url,".boxTitle .listA a") #這裡要注意,使用Selector選區塊時不要按在標題上,要點在旁邊,框框會比點在標題上面大喔, #所以所選出來的程式碼和剛剛的不一樣。 url=html_attr(url,"href") #選擇html頁面中的連結網址的部分(若使用剛剛爬標題的Selector碼會跑不出來,出現NA)
#看跑出的結果,現這頁20篇新聞的連結囉
[1] "news/breakingnews/1831833" "news/breakingnews/1831833" "news/breakingnews/1831860"
[4] "news/breakingnews/1831860" "news/breakingnews/1831841" "news/breakingnews/1831841"
[7] "news/breakingnews/1831835" "news/breakingnews/1831835" "news/breakingnews/1831825"
[10] "news/breakingnews/1831825" "news/breakingnews/1831791" "news/breakingnews/1831791"
[13] "news/breakingnews/1831800" "news/breakingnews/1831800" "news/breakingnews/1831768"
[16] "news/breakingnews/1831768" "news/breakingnews/1831750" "news/breakingnews/1831750"
[19] "news/breakingnews/1831618" "news/breakingnews/1831618"
4.magrittr介紹-讓你程式碼更簡潔的好用套件
覺得上面的程式碼太冗,需要指定參數(table,url)太多次嗎?
#先安裝magrittr套件 install.packages('magrittr') library(magrittr)
#爬棒球新聞標題-程式碼精簡版 title=read_html("http://sports.ltn.com.tw/baseball/") %>% html_nodes(".boxTitle .listA .list_title") %>% html_text() %>% iconv("UTF-8") #只要在開頭指定title,後面幾行只要加上%>%,就不用再指定, #中間的函數也不用輸入title,此套件會自動把前面的函數指定到下個函數的第一個參數中, #如此程式碼就變得簡潔許多啦----------------------------------------------------------------------------------------------------------------------
以上是最基本的爬蟲單個網頁,下一篇會介紹
1.如果想要一次爬很多頁怎麼做?
2.出現error
3.想爬其他attr屬性的網頁資訊
寫這篇分享文主要是因為之前工作內容而需要爬蟲,從零開始花時間各方參考學習終於會一點技巧,所以分享心得給也想開始用R學爬蟲的人參考。
參考資料:
http://blog.bryanbigdata.com/2014/05/r.html
https://rpubs.com/SatoshiLiang/159348
https://stat4701.github.io/edav/2015/04/02/rvest_tutorial/
http://www.jerrynest.com/big-data-workshop-r-crawler/
沒有留言:
張貼留言