Scrapy爬取網(wǎng)易云音樂和評論(一质礼、思路分析)

目錄:

1旺聚、Scrapy爬取網(wǎng)易云音樂和評論(一、思路分析)
2眶蕉、Scrapy爬取網(wǎng)易云音樂和評論(二砰粹、Scrapy框架每個模塊的作用)
3、Scrapy爬取網(wǎng)易云音樂和評論(三造挽、爬取歌手)
4碱璃、Scrapy爬取網(wǎng)易云音樂和評論(四、關(guān)于API)
5、Scrapy爬取網(wǎng)易云音樂和評論(五、評論)

前提:

  1. scrapy這個框架很多人用過谆扎,網(wǎng)上教程也很多座舍,但大多就是爬爬小說這種比較簡單且有規(guī)律的。尤其大多網(wǎng)站它是可以通過點擊下一頁的方式爬取下一頁蛛勉,我看到的教程也都是這樣的。而網(wǎng)易云的按鈕光頁面不采取類似selenium這樣的模擬瀏覽器的模塊是獲取不到的,加上有API讥珍,所以換種方式。

  2. 網(wǎng)易云音樂也有很多人寫過窄瘟,也有API衷佃,不過大多是爬取了熱門歌曲,或是從歌單下手蹄葱。但是考慮到歌單會有大量重復(fù)的氏义,我則從歌手下手——
    當然,從歌手頁的話图云,如果有多個歌手合唱惯悠,那每個歌手頁也都會有這首歌,但他們的鏈接是一樣的琼稻,也是會有重復(fù)的吮螺,但是相對來說就比較少。
    在GitHub上也有很多優(yōu)秀的例子帕翻,例如鸠补,我寫的時候關(guān)于開頭參考了這篇:https://github.com/runningRobin/music163/blob/master/music163/spiders/spider.py,但是它沒有文檔嘀掸,我這里寫一個整站的紫岩。

個人認為scrapy的一些不足

1、在寫的過程中睬塌,發(fā)現(xiàn)scrapy這個框架其實不是那么完美泉蝌,它對上手的要求有點高歇万,而且又有些束縛,尤其是對數(shù)據(jù)庫的操作勋陪,不是那么的完美贪磺。

2、再比如我要設(shè)置一些已經(jīng)存在的url跳過(在沒有索引的情況下)诅愚,而scrapy它本身就是一個各個功能分開寫的寒锚,pinelines這個文件是處理數(shù)據(jù)庫的,但我要處理存在的url跳過违孝,pinelines就不方便了刹前,還有些可能就要寫到程序,這就相悖了雌桑。所以我后來還是沒有用框架又寫了一遍喇喉。這一塊就拿出來當教程吧。

開發(fā)環(huán)境:WIN7+Anaconda+py2.7+scrapy
數(shù)據(jù)庫:MongoDB
文章的順序
1校坑、先分析思路拣技;
2、再分析scrapy框架每個模塊的作用撒踪;
3过咬、最后寫代碼和分析API,以及評論
只有5篇制妄,不會把完整的代碼貼出來掸绞,因為思路很重要,有了思路耕捞,懂得基本操作和順序衔掸,自己折騰就折騰出來了。

一俺抽、我們先分析歌手敞映,有兩種方法:

方法一:遍歷

優(yōu)點:有個別歌手有主頁,但是沒有申請音樂人磷斧,所以不存在歌單列表頁振愿,用第二種方法也獲取不到。
缺點:不好測試它到底有多少弛饭,大概十一二萬的樣子冕末,大多id是相隔不遠的。有些id之間相隔了幾位數(shù)侣颂,本來挺穩(wěn)定的档桃,想著往4位數(shù)遍歷就行,卻發(fā)現(xiàn)還有7位數(shù)的憔晒,這樣遍歷的跨度有些大藻肄,(id從1872開始)蔑舞,要做些處理,還有判斷這個頁面存在與否嘹屯。

方法二:從歌手分類爬取所有歌手的id

歌手分類頁http://music.163.com/#/discover/artist
這里要說一下攻询,網(wǎng)易云的所有網(wǎng)址,要去掉中間那個#號才是真正的url抚垄,帶#的查看源代碼是獲取不到真正的信息的蜕窿。
所以其實是:http://music.163.com/discover/artist

優(yōu)點:方便谋逻,不需要考慮遍歷的數(shù)量呆馁,不需要對頁面是否存在做處理
缺點:可能會漏掉一些有主頁但未注冊的歌手。

我們主要以方法二入手毁兆,分析如下:

我們看這個頁面左側(cè)欄:


圖一

2浙滤、因為當時我寫的時候,參考到前面提到的那篇GitHub上的代碼气堕,
這個group_ids里的就是左側(cè)每個項對應(yīng)所有的頁面了(不包括最上方的推薦歌手和入駐歌手纺腊,因為包含在其他里面了)

圖二 左欄里的id

3、我們按F12或右鍵檢查茎芭,如圖揖膜,每個對應(yīng)的url是:http://music.163.com/discover/artist/cat?id=xxx
這里的id就是上面group_ids里的數(shù)字了梅桩。

圖三

4壹粟、然后我們再點進去,如圖四宿百,url的id就是上面這個group_ids里的元素了趁仙,而后面的initial是首字母的意思,你看下面我們選中的是A垦页,然后它是65雀费,是不是想到ASCII碼?在ASCII碼中A就是從65開始的痊焊,Z是90盏袄,后面以此類推,最后有個其他薄啥,代替的是0:

圖四

我們將這兩個分別存儲為一個列表或元組:

#  左側(cè)欄所有:男女辕羽、國家分類id
group_ids = (1001, 1002, 1003, 2001, 2002, 2003, 6001, 6002, 6003, 7001, 7002, 7003, 4001, 4002, 4003)
# 歌手姓名首字母id
initials = [i for i in range(65,91)] + [0]

二、歌手頁

1罪佳、點進來之后我們來到歌手頁逛漫,http://music.163.com/#/artist?id=6452,同樣赘艳,查看源代碼的時候去掉url里的#酌毡。

2克握、我們獲取的這個歌手頁的url對應(yīng)的是熱門50首,在對應(yīng)網(wǎng)頁里我們會發(fā)現(xiàn)下面有好幾個塊:熱門50首枷踏、專輯菩暗、MV歌手介紹

圖五

3旭蠕、因為受框架的限制停团,以上四個信息的內(nèi)容不在一個傳遞鏈里,
以下兩種順序的特點都是后者傳入的參數(shù)都是由前者返回的掏熬,而這四個之間屬于相同的id佑稠,他們并不需要由前者返回,不構(gòu)成一個傳遞鏈:

1)旗芬、歌手 ——>專輯列表——>歌曲列表——>歌曲信息——>第5
2)舌胶、歌手 ——>熱門50首的歌曲列表——>歌曲信息——>第4

4、如果如果你只需要熱門歌曲你可以獲取它所有鏈接疮丛,這個代碼被我分為兩塊:
1)幔嫂、第一塊是包含熱門50首的url,也只有url誊薄,在id名為'song-list-pre-cache'的div標簽里履恩,div->ul->li->a->href
2)、而第二塊textarea里是json呢蔫,是這50首歌的比較完整的信息切心,只不過,這些信息通過lxml.etree或者BeautifulSoup用text的方式獲取下來會是字符串咐刨,我們需要用json將它格式化昙衅。
如果你只需要歌曲的話,選擇第一條就好了定鸟,直接跳到第四篇講API的)而涉,用歌曲的API即可。

圖六 熱門50首歌曲的所有鏈接或者json

5联予、我們要獲取所有歌手的歌曲啼县,就得從歌手的專輯下手,獲取專輯里所有的歌手才行沸久。我們在專輯頁會發(fā)現(xiàn)季眷,有些是有很多頁的,我最開始用的是scrapy的xpath解析頁面卷胯,后來搜的時候發(fā)現(xiàn)了API子刮,所以接下來的東西,我們就不通過頁面的方式了,API我是通過這個網(wǎng)站發(fā)現(xiàn)的:http://moonlib.com/606.html(最近發(fā)現(xiàn)網(wǎng)站掛了挺峡,請看我的第四篇講API的葵孤,有其他類似API的文章鏈接)。

我們用到的是2到6(不包括5橱赠,沒用到歌單)尤仍,第7條接口是MV的,不過不幸沒有發(fā)現(xiàn)像專輯一樣的列表頁信息狭姨,它只有單曲的MV的API宰啦。不過這里我們用不上。后面第四篇會專門分析API饼拍。

圖七

6赡模、接下來就是每個專輯的所有歌曲還有專輯、歌手的一些信息惕耕,另外專輯下也有評論纺裁,且評論數(shù)的獲取方式有些不同,因此評論有兩種處理司澎。

圖八 專輯信息、歌曲列表

7栋豫、最后從圖八里的歌曲鏈接點進去的就是歌曲頁了挤安,如圖九:

圖九

好,思路就是這樣丧鸯,接下來我們分析Scrapy這個框架蛤铜。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丛肢,隨后出現(xiàn)的幾起案子围肥,更是在濱河造成了極大的恐慌,老刑警劉巖蜂怎,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穆刻,死亡現(xiàn)場離奇詭異,居然都是意外死亡杠步,警方通過查閱死者的電腦和手機氢伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽歼,“玉大人朵锣,你說我怎么就攤上這事〉樗剑” “怎么了诚些?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皇型。 經(jīng)常有香客問我诬烹,道長助析,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任椅您,我火速辦了婚禮外冀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掀泳。我一直安慰自己雪隧,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布员舵。 她就那樣靜靜地躺著脑沿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪马僻。 梳的紋絲不亂的頭發(fā)上庄拇,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音韭邓,去河邊找鬼措近。 笑死,一個胖子當著我的面吹牛女淑,可吹牛的內(nèi)容都是我干的瞭郑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鸭你,長吁一口氣:“原來是場噩夢啊……” “哼屈张!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袱巨,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阁谆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愉老,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體场绿,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年俺夕,在試婚紗的時候發(fā)現(xiàn)自己被綠了裳凸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡劝贸,死狀恐怖姨谷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情映九,我是刑警寧澤梦湘,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響捌议,放射性物質(zhì)發(fā)生泄漏哼拔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一瓣颅、第九天 我趴在偏房一處隱蔽的房頂上張望倦逐。 院中可真熱鬧,春花似錦宫补、人聲如沸檬姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽健民。三九已至,卻和暖如春贫贝,著一層夾襖步出監(jiān)牢的瞬間秉犹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工稚晚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崇堵,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓蜈彼,卻偏偏與公主長得像筑辨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幸逆,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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