gopythoner 发表于 2017-7-13 21:47:36

二次元控的福音,【幻音】歌单爬虫(附件带歌单表格)

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

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

我这个爬虫分为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
                  anylist["create_date"] = the_data
                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个左右
看看成果吧

附件是歌单表格,喜欢二次元音乐的可以下载按照表格的信息去选择自己喜欢的歌单(可以按照Popular和收藏2个参数)

小甲鱼 发表于 2017-7-13 21:57:11

{:10_279:} 感谢分享!

一个账号 发表于 2021-1-7 22:43:15

{:10_279:}感谢分享!
页: [1]
查看完整版本: 二次元控的福音,【幻音】歌单爬虫(附件带歌单表格)