數據挖掘:利用R Studio爬取ANN日本動畫Top 50
7 人贊了文章
最近我了解到,很多朋友都對網路爬蟲等內容感興趣,想要了解一些相關知識。
因此,今天就讓我以爬取「ANN日本動畫人氣排行榜Top 50」的數據為實例,來向大家介紹最基礎的網路抓取和文本挖掘相關的入門知識乁( ˙ ω˙乁)。
背景概述
1、什麼是爬蟲?
所謂爬蟲,指的是利用代碼(我個人比較習慣用Python和R語言)來模擬瀏覽器下載頁面、並通過對HTML結構進行篩選,從而獲取所需信息的一種工具。
2、什麼是R語言?
R是一種自由軟體編程語言與操作環境,主要用於統計分析、繪圖、數據挖掘。R本來是由來自紐西蘭奧克蘭大學的羅斯·伊哈卡和羅伯特·杰特曼開發,現由「R開發核心團隊」負責。
R的源代碼可自由下載使用,亦有已編譯的可執行文件版本可以下載,可在多種平台下運行,包括Linux、Windows和MacOS。隨著R語言的配套模塊與IDE的發展,全世界很多高校的統計學院都將R語言作為必修課,R語言也越來越成為統計分析、數據處理方面的一把利器。
3、什麼是ANN?
ANN全稱是「Anime News Network」,成立於1998年7月,是一個報導日本動漫資訊、J-pop、以及其他北美和日本御宅族文化動態的美國新聞網站。它主要提供日本動畫、漫畫、輕小說、遊戲等的評論和其他社論內容,因此,ANN既是一個讓讀者討論當前事件的論壇,也是一個包含大量動漫資訊、主題曲、故事內容摘要和讀者評分的百科全書。
ANN的榜單有好幾個,在本文中我們將爬取「人氣榜Top 50」,即在ANN上觀看人數最多的50部日本動畫(包括TV、OVA、web、劇場版、電影等):Anime Top 50 Most Popular
Step 1:安裝所需軟體及模塊
由於R語言及其配件基本是全免費的,我們可以直接到官網下載最新版本:
R語言:The R Project for Statistical Computing
R Studio:Download RStudio
如果實在不會安裝,這裡有教程:How to install R
第一次使用R語言的朋友,也可以先看看一些簡單教程:Online Learning
完成安裝之後,就可以開始安裝爬蟲所需的模塊了,這兩個模塊的功能我之後會講到。在載入這兩個模塊的時候,可能會需要調用其它模塊,不過按照界面的指示去安裝即可。
install.packages("XML")install.packages("RCurl")
在安裝完模塊以後,每次需要用的時候都可以很方便的調用,只需輸入如下代碼即可:
library(XML)library(Rcurl)
Step 2:偽造報頭,模擬瀏覽器行為
當我們用瀏覽器訪問一個網頁的時候,瀏覽器會像網頁伺服器發送一些請求信息,這就是所謂的報頭。想要用R來模擬瀏覽器的行為,我們就必須偽造報頭,如下所示:
header = c( "User-Agent"="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ", "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language"="en-us", "Connection"="keep-alive", "Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")
Step 3:模擬訪問並整理HTML結構
在該範例中,我們先定義了一個名為「url」的string,並將目標網頁的網址賦值給它。
然後,我們調用模塊RCurl中的「getURL」函數來臨時獲得目標網頁的內容,並將這些內容存儲在變數「webpage」中。最後,我們就可以用模塊XML中的「htmlTreeParse」函數來整理我們先前所獲得的HTML結構了。
想了解RCurl中更多函數及用途,可以參考:RCurl package | R Documentation
想了解XML中更多函數及用途,可以參考:XML package | R Documentation
url = "https://www.animenewsnetwork.com/encyclopedia/ratings-anime.php?top50=popular"webpage = getURL(url,httpheader=header)pagetree = htmlTreeParse(webpage,encoding="UTF-8", error=function(...){}, useInternalNodes = TRUE,trim=TRUE)
Step 4:提取節點元素
這時候,我們實際上已經將該網頁信息爬取下來了,只需要提取出我們所需的關鍵信息即可。
在目標網頁,我們可以檢查出它的HTML結構,這裡其實就需要一些HTML的基礎知識了,很多數據挖掘的基礎書的前幾章都有介紹,但是也可以一邊做項目、一邊自行到網上查詢:https://html.spec.whatwg.org/print.pdf。結構如下圖所示:
我簡單介紹一下該範例所需的幾個:<body>元素包含了該文檔的頁面可見內容,<tr>元素則代表產生一個新行,<td>元素代表在<tr>內部定義的單元。
上述HTML結構在網頁中顯示的結果,就是下圖所示的樣子:
所以我們只需如下代碼,就可以提煉出我們所需的「人氣榜Top 50」的動畫名稱:
xpath = getNodeSet(pagetree, "//td//a[@href]/text()")info = sapply(xpath,xmlValue)
現在,所有的所需信息都已經儲存在變數「info」當中了。最後我們就可以方便地查看變數「info」中的信息,結果如圖所示:
info [1] "Fullmetal Alchemist (TV)" [2] "Death Note (TV)" [3] "Cowboy Bebop (TV)" [4] "Spirited Away (movie)" [5] "Princess Mononoke (movie)" [6] " Melancholy of Haruhi Suzumiya (TV)" [7] "Elfen Lied (TV)" [8] "Neon Genesis Evangelion (TV)" [9] "Code Geass: Lelouch of the Rebellion (TV)" [10] "Bleach (TV)" [11] "FLCL (OAV)" [12] "Code Geass: Lelouch of the Rebellion R2 (TV)" [13] "Naruto (TV)" [14] "Samurai Champloo (TV)" [15] "Trigun (TV)" [16] "Gurren Lagann (TV)" [17] "Rurouni Kenshin: Trust & Betrayal (OAV)" [18] "Full Metal Panic! (TV)" [19] "Howls Moving Castle (movie)" [20] "Ouran High School Host Club (TV)" [21] "Clannad (TV)" [22] "Fullmetal Alchemist: Brotherhood (TV)" [23] "Fruits Basket (TV)" [24] "Chobits (TV)" [25] "Cowboy Bebop: The Movie" [26] "Full Metal Panic? Fumoffu (TV)" [27] "Akira (movie)" [28] "5 Centimeters Per Second (movie)" [29] "Rurouni Kenshin (TV)" [30] " Girl Who Leapt Through Time (movie)" [31] "Ghost in the Shell (movie)" [32] "Final Fantasy VII: Advent Children (movie)" [33] "Hellsing (TV)" [34] "Azumanga Daioh (TV)" [35] "Clannad After Story (TV)" [36] "Fullmetal Alchemist: The Movie - Conqueror of Shamballa"[37] "Ghost in the Shell: Stand Alone Complex (TV)" [38] "Mushi-Shi (TV)" [39] "Darker than Black (TV)" [40] "Fate/stay night (TV)" [41] "Nausica? of the Valley of the Wind (movie)" [42] "Claymore (TV)" [43] "Inuyasha (TV)" [44] "Full Metal Panic! The Second Raid (TV)" [45] "Steins;Gate (TV)" [46] "Toradora! (TV)" [47] "Blood+ (TV)" [48] "Castle in the Sky (movie)" [49] "Black Lagoon (TV)" [50] "Angel Beats! (TV)"
1~10名的中文翻譯分別是:
《鋼之鍊金術師(2003)》、《死亡筆記》、《星際牛仔》、《千與千尋》、《幽靈公主》、《涼宮春日的憂鬱》、《妖精的旋律》、《新世紀福音戰士(TV)》、《叛逆的魯路修 第一季》、《死神》。
11~20名的中文翻譯分別是:
《特別的她》、《叛逆的魯路修 第二季》、《火影》、《混沌武士》、《槍神Trigun》、《天元突破(TV)》、《浪客劍心 追憶篇》、《全金屬狂潮 第一季》、《哈爾的移動城堡》、《櫻蘭高校男公關部》。
......
還是簡單地說明一下,該排行榜僅代表該動畫在歐美的人氣,由「已觀看人數」和「動畫評分」綜合來決定,不完全代表該作品的質量。例如,鋼煉09的評分是比鋼煉03高的,但是03版的觀看人數超過09版很多,所以導致在這個榜里09的排名不如03高。
最後,本文有的地方可能講的不清楚,還請見諒,不要批評我哦(╯‵□′)╯︵┴─┴
推薦閱讀:
※航空客戶價值分析-聚類分群
※SEO常見名詞
※推薦系統遇上深度學習(十)--GBDT+LR融合方案實戰
※【大數據點滴應用系列】配合財稅改革,九次方大數據做了這件事
※用R語言進行文本挖掘和主題建模