—————————————————————————————————
泻药,以我抓取了307835首网易云音乐的歌单歌曲的经验,讲一下这个问题。
喜欢用Github的可以直接看我的项目源码,代码简单、具体使用方法和数据库细节介绍的很全面:Chengyumeng/spider163
我使用的技术栈是Python + MySQL,数据库相关的配置可在spider163.conf中配置。
我使用的策略是,通过热门歌单列表抓取全部歌单名字,热门歌单URL为:网易云音乐
抓下这些热门URL,持久化到数据库中,然后继续通过存储的歌单URL,继续抓取歌单里面的歌曲URL,歌曲的URL格式为:网易云音乐
然后下一步,就是针对网易云音乐的歌曲页面做信息采集,你可以抓的数据有歌曲的词曲作者、歌词、评论等信息,我抓取的数据为歌曲热评和评论总数。
基于此,可以建立这样的抓取模型:歌单列表 -> 歌单 -> 歌曲
------------------------分割线是这么画吗?-----------------------------
相关操作:
抓取热门歌单
$ python playlist.py 1 10
$ # 抓取热门歌单前十页的歌单名字和链接
$ python playlist.py 粤语 1 42
$ # 抓取全部粤语歌单
抓取歌单内歌曲
$ python music.py playlist 376259016
$ # 抓取编号为 376259016 的歌单
$ python music.py database
$ # 抓取存储的热门歌单里面的歌曲,批量抓取
抓取歌曲评论
$ python comment.py
$ # 自动抓取已存储歌曲,并保持去重复
TODO增加抓取歌单页面个性推荐歌单
增加抓取排行榜
严格去重复 ✔️
优化代码结构,冗余代码过多
BUG若干歌单无法抓取,待重现定位
...
虽然我没有使用分布式,但是单线程的效率已经相当不错,这是MySQL的读写图:
基本上可以保证平均一小时1万首音乐的抓取。
我的抓取数据:8600张热门歌单
307835首歌曲
1410482条评论
欢迎大家使用我的代码,并进一步做数据挖掘。
您可以关注我的技术分享微信公众号:程天写代码。交流Python、Go、高可用、云计算等方面学习心得。