鱼C论坛

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

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

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

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

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

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

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

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

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

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

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

  14.     # 提取所有歌单的信息
  15.     def get_playlists(self,url):
  16.         req = requests.get(url,headers=self.headers)
  17.         req.encoding = "utf-8"
  18.         infos = json.loads(req.text)
  19.         big_lists = infos["genres"]
  20.         for each in big_lists:
  21.             small_lists = each["playlists"]
  22.             for anylist in small_lists:
  23.                 link = "http://www.huanmusic.com/playlist/{}".format(anylist["_id"])
  24.                 anylist["link"] = link
  25.                 # 由于请求歌单的信息可能失败,因此使用try语句
  26.                 try:
  27.                     the_data = self.get_one_playlist(link)
  28.                     anylist["collect"] = the_data[0]
  29.                     anylist["create_date"] = the_data[1]
  30.                 except:
  31.                     anylist["collect"] = "miss"
  32.                     anylist["create_date"] = "miss"
  33.                 print(anylist)
  34.                 self.myexcel.save_data(self.line,anylist)  #保存信息
  35.                 self.line += 1
  36.         self.myexcel.save_excel()
  37.         print("歌单信息保存完毕!")

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

  50. if __name__ == '__main__':
  51.     url = "http://net.huanmusic.com/g_v1_20170713"
  52.     t = time.time()
  53.     spider = myspider()
  54.     spider.get_playlists(url)
  55.     tt = time.time()
  56.     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 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-13 21:57:11 | 显示全部楼层
感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 22:43:15 | 显示全部楼层
感谢分享!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 04:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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