在常見的幾個音樂網站里,酷狗可以說是最好爬取的啦,什么彎都沒有,也沒加密啥的,所以最適合小白入門爬蟲

本篇針對爬蟲零基礎的小白,所以每一步驟我都截圖並詳細解釋了,其實我自己看着都啰嗦,歸根到底就是兩個步驟的請求,還請大佬繞路勿噴。

1、打開酷狗官網,可以看到搜索框,我們要爬取的數據就是搜索歌曲后,酷狗后台返回的歌曲列表以及每首歌的歌曲信息(歌詞、作者、url等)

2、敲F12鍵進入開發者模式,選擇Network - All (這里就是酷狗前后台交互的所有請求列表)

3、搜索框中輸入搜索內容,然后右側就可以看到會出現很多列表,搜索的列表數據其實就在這里面一條,我已經紅色框標注了(找出這個可以根據那個名字song_search,實在不行點開一個個看是不是所要找的內容)

4、點開這行,上面切換到Preview發現就是搜索結果的json數據,lists就是數據列表

5、點開一條歌曲,里面就包含歌曲名字,作者,AlbumID,FileHash等歌曲信息

6、然后我們上面切換到Headers,可以看到RequestURL(就是請求網址),下面箭頭可以看到是GET請求

7、往下滑,可以看到Requset Headers(這個后端會驗證heades,一般請求時user-agent都需要寫上,有些還驗證更偏的,需要看情況處理,酷狗倒是沒有驗證,不寫headers請求也可以)和請求參數(這就是請求的參數,搜索關鍵詞、請求數目等信息)

8、話不多說,我們直接用python的requests庫(這個直接百度裝一下就行)構造請求,我的環境是python2.7,python3的注意一下版本差異

#coding=utf-8import requestssearch = '喜歡你' #搜索內容pagesize = '10' #請求數目url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery11240251602301830425_1548735800928&keyword=%s&page=1&pagesize=%s&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1548735800930' % (search,pagesize)res = requests.get(url) #requests發起get請求print res.text #輸出響應內容

輸出結果就是這樣,可以看到返回json內容全部打印了出來,這就是和剛才在瀏覽器開發者工具看到的信息一樣

10、接着我們拿到列表后,再轉回瀏覽器,拿到列表每一條歌曲的具體信息,左側選擇第一條點擊進入詳情頁

11、可以看到跳轉到了播放頁面,刷新一下頁面,重新加載一遍

12、可以看到右側紅色框圈起來的就是歌曲信息(你可能問我怎么知道哪個才是包含歌曲信息的,當然是觀察法了,寫多了就有經驗了,實在不會一個個點進去看)

13、我用箭頭標注的都是一般需要爬取的有用信息,可以看到作者,歌曲名,歌詞,專輯圖片,id,play_url都在里面,不信你把play_url復制到地址欄回車播放的肯定是這個歌曲,拿到這個url我們就可以直接下載歌曲了

14、接着我們再從上方從Preview切換到Headers,可以看到和請求歌曲列表差不多,還是GET請求

15、這里的query同樣還是GET請求的參數,其中hash和album_id就是一首歌曲的信息,我們只需要請求不同歌曲時改這兩個參數就行了(第一步請求搜索列表每一行單曲數據包含這個參數了)

16、直接剛才根據開發者模式里面的RequestURL,構造get請求,請求每首歌曲時換上每首歌對應的id和hash值就行

#coding=utf-8import requests#在這里,為了分步演示,直接用剛才第一步搜索時開發者模式獲取到的搜索列表第一條的id和hash#文章最后有整個連貫的代碼id = '557512' #單曲idhash = '41C2E4AB5660EAE04021C5893E055F50' #單曲hash值url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19107465224671418371_1555932632517&hash=%s&album_id=%s&_=1555932632518' % (hash,id)res = requests.get(url)print res.text

可以看到控制台打印了單曲信息,因為是json數據沒有轉換,直接輸出打印現在看起來有點亂

注意,酷狗返回數據並不直接就是json格式,兩端有一些無用字符串,需用正則表達式去除,只保留大括號{}里面(包括大括號)內容,19步驟代碼里有說明

19、我們已經熟悉了上面的兩步,最后進行匯總寫一個完整的python爬蟲,輸入搜索歌曲,拿到搜索列表並包括單曲信息

# coding=utf-8import requestsimport jsonimport re# 請求搜索列表數據search = raw_input('音樂名:') # 控制台輸入搜索關鍵詞pagesize = "10" # 請求數目url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery11240251602301830425_1548735800928&keyword=%s&page=1&pagesize=%s&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1548735800930' % (search, pagesize)res = requests.get(url) # 進行get請求# 需要注意一點,返回的數據並不是真正的json格式,前后有那個多余字符串需要用正則表達式去掉,只要大括號{}包着的內容# json.loads就是將json數據轉為python字典的函數res = json.loads(re.match(".*?({.*}).*", res.text, re.S).group(1))list = res['data']['lists'] # 這個就是歌曲列表#建立List存放歌曲列表信息,將這個歌曲列表輸出,別的程序就可以直接調用musicList = []#for循環遍歷列表得到每首單曲的信息for item in list:#將列表每項的item['FileHash'],item['AlnbumID']拼接請求url2url2 = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191010559973368921649_1548736071852&hash=%s&album_id=%s&_=1548736071853' % (item['FileHash'], item['AlbumID'])res2 = requests.get(url2)res2 = json.loads(re.match(".*?({.*}).*", res2.text).group(1))['data']#同樣需要用正則處理一下才為json格式,再轉為字典#打印一下print res2['song_name']+' - '+res2['author_name']print res2['play_url']print ''#將單曲信息存在一個字典里dict = {'author': res2['author_name'],'title': res2['song_name'],'id': str(res2['album_id']),'type': 'kugou','pic': res2['img'],'url': res2['play_url'],'lrc': res2['lyrics']}#將字典添加到歌曲列表musicList.append(dict)

最后控制台輸出結果

學習python過程中有不懂的可以加入我的python零基礎系統學習交流秋秋qun:934109170,與你分享Python企業當下人才需求及怎么從零基礎學習Python,和學習什么內容

學習python有不懂的(學習方法,學習路線,如何學習有效率的問題),可以隨時來咨詢我,或者缺少系統學習資料

python爬取酷狗付费音乐_python爬蟲教程:爬取酷狗音樂相关推荐

  1. python爬虫scrapy爬取新闻标题及链接_python爬虫框架scrapy爬取梅花网资讯信息

    原标题:python爬虫框架scrapy爬取梅花网资讯信息 一.介绍 本例子用scrapy-splash爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息, ...

  2. python中的除法、取整和求模_python中的除法,取整和求模

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 先说核心要点: 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整roun ...

  3. python中的除法、取整和求模_python中的除法,取整和求模-Go语言中文社区

    首先注明:如果没有特别说明,以下内容都是基于python 3.4的. 先说核心要点: 1. /是精确除法,//是向下取整除法,%是求模 2. %求模是基于向下取整除法规则的 3. 四舍五入取整roun ...

  4. 利用python爬取豆瓣音乐_Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

    节点的子节点,获取排名的代码为:li.span.text 绿色框中A节点中是歌曲的链接和图片链接,获取歌曲链接的代码为:li.a['href'] 蓝色框中是歌曲的名字.演唱者和播放次数,歌曲名是在cl ...

  5. python 依据某几列累加求和_Python爬虫笔记:爬取单个页面

    前言 学习Python爬虫技术也是一件需要大量实践的事情,因为并不是所有的网站都对爬虫友好,更多的一种情况是网站为了限制爬虫不得不在最小化影响用户体验的前提下对网站访问做出一定的限制,最常见的就是一些 ...

  6. python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  7. python爬取豆瓣电影并分析_Python实战之如何爬取豆瓣电影?本文教你

    爬虫又称为网页蜘蛛,是一种程序或脚本. 但重点在于,它能够按照一定的规则,自动获取网页信息. 爬虫的基本原理--通用框架 1.挑选种子URL: 2.讲这些URL放入带抓取的URL列队: 3.取出带抓取 ...

  8. python爬虫爬取豆瓣电影信息城市_Python爬虫入门 | 2 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  9. python爬取知网论文关键词_Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】...

    搜索出来的结果和知网上的结果几乎一样,另外以后面试找Python工作,项目经验展示是核心,如果你缺项目练习,去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面很多新 ...

最新文章

  1. 施一公:年轻人不要花时间去拉关系,尽全力做研究,以实力取胜!
  2. mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例
  3. Zookeeper默认占用8080端口问题以及常见启动错误的解决
  4. springcloud 创建子父项目_idea搭建springCloud----搭建父子项目(二)
  5. Interllij IDEA 搭建Springboot(一)
  6. 如何用Linux搭建家庭云服务,使用ownCloud在Linux安装你的个人云服务 私有云的搭建...
  7. CSU-ACM集训-模板-主席树
  8. 【BZOJ 3990】 [SDOI2015]排序
  9. OpenWrt 防火墙组件
  10. 2022年中青杯B题数学建模文档及程序-三孩生育数学建模
  11. ERROR: Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.10
  12. wpsmac和pc版的区别_WPS Mac版本与Microsoft有什么区别?
  13. 分析系统业务流程和绘制系统业务流程图
  14. 邮箱服务器退回,126邮箱群发邮件被对方服务器退回
  15. 三菱FX5U多冲一切追剪程序。 无需40SSC运动模块,通过软件电子凸轮算法实现追剪功能
  16. 全连接网络:实现第一个全连接网络
  17. 只会Python可造不出iPhone
  18. 【2017秋季校园招聘笔经面经专题汇总】
  19. 马丁福勒微服务论文网址
  20. 推荐使用多年的这些高效的工具网站,每一个都值得收藏

热门文章

  1. 【Python】argparse 介绍
  2. 养号经验分享: 亚马逊、eBay、Wish店铺自养买家号
  3. oracle细粒度(fga)审核
  4. 歌谣学前端之React中虚拟dom
  5. google各国网址
  6. body html 分别指什么,body表示什么
  7. 网上投票作弊的技术实现(纯技术交流,勿用作他途!!) (ZT)
  8. 服务器 保密协议,云服务器保密协议
  9. uniapp实现webview和APP之间的传值通信 / VUE和HTML页面通信
  10. excel图表整形:如何提升条形图的颜值