鱼C论坛

 找回密码
 立即注册
查看: 2390|回复: 2

[技术交流] 二次元控的福音,【幻音】歌单爬虫(附件带歌单表格)

[复制链接]
发表于 2017-7-13 21:47:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
爬虫背景:昨天论坛以为兄弟让分析幻音歌单的网页,我在公司查看了一下,发现页面并不复杂,于是给了个答案,得了最佳。
。。。
这不是重点,重点是,我也是第一次看到这个二次元音乐网站,突然发现上面的歌单挺好听的
于是,觉得下班自己爬一份歌单出来

。。。
。。。——————————————————————————————————————————分割线
于是,爬虫来了

我这个爬虫分为2个部分,主要的部分是爬虫文件spider,另一部分是存储数据的部分(这个部分一个人爱好,我有时候懒得写这个部分就直接存到CSV中,不过这次是为了熟悉一下Excel库的用法,就用Excel来存储的,之后可能改为数据库,这个部分的代码就免了,因为没必要)

主爬虫代码如下(其中有几句是用来存储信息的,大家自己去看吧,代码很简单,因为这个网站的信息都是json,很好整理)
大家可以把这个思路拿过去,然后换成多线程啊(我之所以没用多线程是怕封IP,因为要请求1500次,为什么是1500次可以自己去看看)
'''
幻音网歌单信息爬虫
'''

import requests
import json
import time
from Savedata import myExcel  #这个是导入我存数据的文件

class myspider(object):
    def __init__(self):
        self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
                        " (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"}
        self.myexcel = myExcel()
        self.line = 1

    # 提取所有歌单的信息
    def get_playlists(self,url):
        req = requests.get(url,headers=self.headers)
        req.encoding = "utf-8"
        infos = json.loads(req.text)
        big_lists = infos["genres"]
        for each in big_lists:
            small_lists = each["playlists"]
            for anylist in small_lists:
                link = "http://www.huanmusic.com/playlist/{}".format(anylist["_id"])
                anylist["link"] = link
                # 由于请求歌单的信息可能失败,因此使用try语句
                try:
                    the_data = self.get_one_playlist(link)
                    anylist["collect"] = the_data[0]
                    anylist["create_date"] = the_data[1]
                except:
                    anylist["collect"] = "miss"
                    anylist["create_date"] = "miss"
                print(anylist)
                self.myexcel.save_data(self.line,anylist)  #保存信息
                self.line += 1
        self.myexcel.save_excel()
        print("歌单信息保存完毕!")

    # 获取单个歌单的基本信息,主要是获取创建时间和收藏数,返回一个元祖
    def get_one_playlist(self,list_url):
        headers = {
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"
            " Chrome/57.0.2987.110 Safari/537.36",
            "Host":"www.huanmusic.com"
        }
        req = requests.post(list_url,headers=headers,timeout=5)
        data = json.loads(req.text)
        collect = data["collect"]
        create_date = data["create_date"]
        return (collect,create_date)

if __name__ == '__main__':
    url = "http://net.huanmusic.com/g_v1_20170713"
    t = time.time()
    spider = myspider()
    spider.get_playlists(url)
    tt = time.time()
    print("耗时:{:.2f}秒".format(float(tt-t)))

关于爬到 的信息,我存到了Excel里面,总计本来是有1500个歌单的信息的,
我删除了重复性之后剩下1050个左右
看看成果吧
QQ截图20170713213536.png
附件是歌单表格,喜欢二次元音乐的可以下载按照表格的信息去选择自己喜欢的歌单(可以按照Popular和收藏2个参数)

201707132117_幻音歌单.zip

162.92 KB, 下载次数: 5

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +8 收起 理由
小甲鱼 + 10 + 10 + 8 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-13 21:57:11 | 显示全部楼层
感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 22:43:15 | 显示全部楼层
感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 22:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表