马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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个左右
看看成果吧
附件是歌单表格,喜欢二次元音乐的可以下载按照表格的信息去选择自己喜欢的歌单(可以按照Popular和收藏2个参数)
|