Scrapy爬取网易云音乐和评论(一、思路分析)
来源:互联网 发布:哪个不是淘宝禁售商品 编辑:程序博客网 时间:2024/05/21 22:47
目录:
1、Scrapy爬取网易云音乐和评论(一、思路分析)
2、Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
3、Scrapy爬取网易云音乐和评论(三、爬取歌手)
4、Scrapy爬取网易云音乐和评论(四、关于API)
5、Scrapy爬取网易云音乐和评论(五、评论)
前提:
scrapy这个框架很多人用过,网上教程也很多,但大多就是爬爬小说这种比较简单且有规律的,网易云音乐也有很多人写过,也有API,不过大多是爬取了热门歌曲,或是从歌单下手,但是考虑到歌单会有很多重复的。当然,从歌手页的话,如果有多个歌手合唱,那每个歌手页也都会有这首歌,但他们的链接是一样的,也是会有重复的,但是相对来说就比较少,所以就从歌手下手。在GitHub上也有很多优秀的例子,但没有文档,我这里写一个整站的。
另外,在写的过程中,发现scrapy这个框架其实不是那么完美,它对上手的要求有点高,而且又有些束缚,尤其是对数据库的操作,不是那么的完美。
就比如我要设置一些已经存在的url跳过(在没有索引的情况下),而scrapy它本身就是一个各个功能分开写的,pinelines这个文件是处理数据库的,但我要处理存在的url跳过,pinelines就不方便了,还有些可能就要写到程序,这就相悖了。所以我后来还是没有用框架又写了一遍。这一块就拿出来当教程吧。
开发环境:WIN7+Anaconda+py2.7+scrapy
数据库:MongoDB
文章的顺序:先分析思路,再分析scrapy框架每个模块的作用,最后写代码和分析API,只有5篇。
一、我们先爬歌手,有两种方法:
方法一:
一种是遍历,大概十一二万的样子,大多id是相隔不远的,有个别歌手有主页,但是没有申请音乐人,用这种方式比较齐,也不用去单独写代码。
但我最开始用的是下面这种,我们也拿这个来分析:
方法二:
1、从这个页面,爬取所有歌手的id:http://music.163.com/#/discover/artist,这里要说一下,网易云的所有网址,要去掉中间那个#号才是真正的url,带#的查看源代码是获取不到真正的信息的。所以其实是:http://music.163.com/discover/artist。
我们看这个页面左侧栏:
2、因为当时我写的时候,参考到这篇,https://github.com/runningRobin/music163/blob/master/music163/spiders/spider.py
这个group_ids里的就是左侧每个项对应所有的页面了(不包括最上方的推荐歌手和入驻歌手,因为包含在其他里面了)
3、我们按F12或右键检查,如图,每个对应的url是:http://music.163.com/discover/artist/cat?id=xxx:
4、然后我们再点进去:
url的id就是上面这个id了,而后面的initial是什么呢?initial是首字母的意思,你看下面我们选中的是A,然后它是65,是不是想到ASCII码,在ASCII码中A就是从65开始的,Z是90,后面以此类推,最后有个其他,是0,我们将它弄成一个列表:
# 男女、国家分类idgroup_ids = (1001, 1002, 1003, 2001, 2002, 2003, 6001, 6002, 6003, 7001, 7002, 7003, 4001, 4002, 4003)# 歌手姓名首字母idinitials = [i for i in range(65,91)] + [0]
二、歌手页
1、点进来之后我们来到歌手页,http://music.163.com/#/artist?id=6452,同样,去掉#,
2、我们会发现下面有好几个块,
我们获取的这个url对应的是热门50首,如果你只需要热门歌曲你可以获取它所有链接:
这个代码被我分为两块,第一块是热门50首的url,也只有url。
而第二块textarea里是json,是这些歌曲的完整的信息,我获取的是json信息,只不过,这些信息通过lxml.etree或者BeautifulSoup用text的方式获取下来会是字符串,我们需要用json将它格式化,但是极个别在爬取的过程中,死活获取不到。
3、上面那个是歌手的热门歌曲,我们要获取全站,就得从歌手的专辑下手,获取专辑里所有的歌手才行。因为scrapy本身的束缚,其实说是全站,并不是那么方便,比如这四个板块,我们只能选一个,一直往下,单曲或MV就得另写。
4、我们在专辑页会发现,有些是有很多页的,后来搜的时候发现了API,所以接下来的东西,我们就不通过页面的方式了,API我是通过这个网站发现的:http://moonlib.com/606.html,因为最开始我的目的是爬评论,来看到评论的API很多变了,我以为这些都变了,一开始还搁置了没用,傻傻的去写lxml,但是它的翻页的序号是爬不到的,后来随手测试了一下API,发现都有用。我们用到的是2到6(不包括5,没用到歌单),第7条接口是MV的,不过不幸没有发现像专辑一样的列表页信息,它只有单曲的MV的API。不过这里我们用不上。后面会专门分析API。
5、接下来就是每个专辑的所有歌曲还有专辑、歌手的一些信息,专辑下也有评论
6、最后就是歌曲页了
好,思路就是这样,接下来我们分析Scrapy这个框架。
- Scrapy爬取网易云音乐和评论(一、思路分析)
- Scrapy爬取网易云音乐和评论(五、评论)
- Scrapy爬取网易云音乐和评论(二、Scrapy框架每个模块的作用)
- Scrapy爬取网易云音乐和评论(三、爬取歌手)
- Scrapy爬取网易云音乐和评论(四、关于API)
- 爬取网易云音乐评论《安河桥》,进行分析
- 爬取网易云音乐评论
- 爬取网易云音乐评论2
- 爬取网易云音乐下面的热门评论
- scrapy爬取网易云音乐的MP3链接
- python使用scrapy爬取qq音乐(一)
- 网易云音乐爬虫--评论爬取以及Top Music统计
- 利用Python爬取基于AES对称加密算法的网易云音乐用户评论数据
- python爬取网易评论
- Python爬一爬网易云音乐(几百万评论)
- python爬虫入门 实战(三)---爬网易云音乐热门评论
- Python 获取 网易云音乐热门评论
- 网易云音乐 最美的评论
- bean的生命周期加载
- base64
- 6、bash特性、文件目录命令、时间戳
- 随机密码
- mybatis出现There is no getter for property named 'Id' in 'class java.lang.Intege
- Scrapy爬取网易云音乐和评论(一、思路分析)
- linux设备驱动之8250串口驱动
- Centos 开始Core调试
- mysql数据库索引的使用及介绍
- Dialog嵌套listview最后一行被遮盖问题
- 修改2410的linux串口驱动,使其支持RS485
- 如何解决禁用cookie?
- javascript中的数组方法
- 2的幂次方表示答案及注释(NOIP)