我需要一些音乐数据,而 豆瓣音乐 上相关数据是非常齐全的。
即使是十分小众、鲜有人听过的专辑,豆瓣也提供了较为详细的描述。
摆在我面前的第一个问题是,如何将豆瓣音乐上的专辑一网打尽,一个不遗漏地抓取到。
我们观察某个专辑的页面: http://music.douban.com/subject/1415369/
看到subject后跟着一串数字ID,这时候一个简单的思路已经出来了:
将id从1不断递增,扫描完所有的ID,检查哪些ID是存在的
又观察到大多数专辑页面上存在相关推荐,也就是那个“喜欢某某专辑的人也喜欢… …”。
这里存在一对N的超链接映射,最终形成了网络,于是可以有第二个思路:
将某个专辑加入队列,从它出发,通过 “也喜欢” 来获取新专辑,并将这些新专辑加入队尾
每完成一次操作,就从队列中删除队首的专辑
循环上面的过程,直到处理完队列中的所有元素
最终获取到的就是包含第一个元素的网
当然,上面的思路是有缺陷的,那些孤立的专辑无法被包括进来。