酷狗音乐的爬取,从无到有完整教程-下:功能代码讲解

是的我又回来了,这次是代码的讲解哦。

参数项生成

上一章我们提到,在包含了歌曲url,歌曲信息的请求中,有几个参数项的值是随机数就可以,但是,你仔细看,虽然是随机数,有些参数项的值就是数字,有些就是数字和字符混合,所以这里我们不仅要生成随机数,还要分类生成不同的随机数。
给大家看一下我写的的生成函数(目前是我感觉最明了的方法了>_<)


调用这个函数需要提供两个参数,一是DataType,也就是要生成的类型,是纯字符还是纯数字还是混合,还有一个就是length,也就是生成的字符串长度,这个很好理解就不多说嘻嘻

请求中等待时间的随机

由于在请求网页数据的时候需要等待网页加载完在获得网页当前的元素,所以就会需要一个等待时间,但是固定的等待时间,容易让浏览器觉得你是个假人,不能很好的伪装(我也是从别人的blog看的哈哈),从而让服务器抹掉你的cookies或者ip什么的,嗯对没错,就是这样>//>
延时后再加个随机秒数就好了

def gen_random_sec(fix = 1):a = random.random()a = a + fixreturn a

创建虚拟浏览器并获取各类榜单的href

用selenium库中的webdriver来创建

edge_driver = r"E:\venv\Lib\site-packages\selenium\webdriver\msedge\msedgedriver.exe"
# 需要把该路径加到windows运行环境中
browser = webdriver.Edge(executable_path=edge_driver)

请求酷狗排行榜页面

def get_category_rank(url='https://www.kugou.com/yy/html/rank.html'):browser.get(url)# 请求页面,即浏览器打开该页面time.sleep(gen_random_sec())print(gen_random_sec())data = browser.page_source# 获取当前页面的html组成元素soup = BeautifulSoup(data, 'html.parser')# 网页带有16进制,需解码,soup就等于网页的元素了,可以用来提取想要的数据rank_group = soup.findAll('a',attrs={'hidefocus':'true'})# 这里抓取的就是左边的各类排行榜元素,attrs={}里面是他们的元素属性category_rank = []for i, value in enumerate(rank_group):# 收集所有类别榜单的hrefcategory_rank.append(value.attrs['href'])return category_rank

抓取各类排行榜的歌曲播放页面href

这个直接根据attrs特征抓就完事了,上码

def get_href_group(search_html):browser.get(search_html)time.sleep(gen_random_sec())print(gen_random_sec())data = browser.page_sourcesoup = BeautifulSoup(data, 'html.parser')# 网页带有16进制,需解码href_list = soup.findAll('a', attrs="data-active=\"playDwn\"", class_="pc_temp_songname")href_group = []# 将歌曲播放页面的href收集起来for i, value in enumerate(href_list):href_group.append(value.attrs['href'])return href_group


还有不知道怎么定位的小伙伴,点击这个图标之后再把你的鼠标位置移到你想要定位的地方就可以自动定位到他的网页元素组成部分

跳转到歌曲播放页面并提取参数项hash和album_id

def get_data_Url(href):album_data = [0]browser.get(href)time.sleep(gen_random_sec())a = browser.current_urlalbum_data = re.split("\.html#|&",a)# ['', 'hash=AF2C86AE1836546B32778C18A2F37234', 'album_id=37515535']album_data[0] = {"hash":album_data[-2],"album_id":album_data[-1]}str1 = gen_random_str("int",19)str2 = gen_random_str("int",13)str3 = gen_random_str("mix",24)str4 = gen_random_str("mix",32)str5 = gen_random_str("int",13)# str1,2,3,4,5都是之前说的参数项值(可随机生成)data_url = "https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery"+str1+"_"+str2+"&"+album_data[0]['hash']+"&dfid="+str3+"&mid="+str4+"&platid=4&"+album_data[0]['album_id']+"&_="+str5+""return data_url

有人就说,博主你不是说hash包含在href里面吗,为什么不直接提取就好了,还要加一句browser.current_url来获取当前网页的url然后再提取hash,id,其实你可以仔细看看,你在上一步提取的href,跳转过来等一会就变了,不信你看下面

—这是分割线—

仔细看确实是不一样的

提取信息和下载的url

def get_playurl(data_url):data = requests.get(data_url)data = requests.get(data_url).texta = re.split("\(|\)", data)# 爬取回来的为response格式,需要用split提取其中json数据,然后再用json.loads(似乎还会帮你解码中文)将json转化成字典data_dict=json.loads(a[1])play_url=data_dict['data']['play_url']avatar=data_dict['data']['authors'][0]['avatar']author_name=data_dict['data']['author_name']audio_name=data_dict['data']['audio_name']album_name=data_dict['data']['album_name']song_name=data_dict['data']['song_name']b={"play_url":play_url,"avator":avatar,"author_name":author_name,"audio_name":audio_name,"album_name":album_name,"song_name":song_name}song_data.append(b)

json.loads可以帮我们把字符转为字典(符合字典格式的字符串),方便我们提取数据

下载至本地

def download(song_data):for i in song_data:FileName = FileRoot + '\\' + i['audio_name'] + '.mp3'# 这个是你的保存路径DownloadUrl = i['play_url']try:with open(FileName, 'wb') as f:f.write(requests.get(DownloadUrl).content)# 此句作用等于下载网页的内容,因为这是音频流,所以等于直接下载音乐#SetMp3Info(FileName, i)print(i['audio_name']+'-----下载成功')except:print('该音频无法正常下载---' + i['audio_name'] + ':' + DownloadUrl)

有人会好奇with open(FileName, ‘wb’) as f:中的wb代表什么,其实我一开始也不知道,只会用,后面我去查了下,才发现有一定的学问在里头。具体看这,来自别人的blog

-----------------------------------------这是分割线---------------------------------------------
到此对酷狗的爬取就完结了,我诚挚感谢各位能人异士在各个网站上对我的帮助,过程中很多的报错,很多的奇怪现象我都遇到过,有时候单靠我一人还真不知道从何下手。
在此给大家安利一个网站,以后你遇到什么莫名其妙的报错,一般在这上面都可以找到你想要的答案
https://stackoverflow.com/

关于整篇的代码,我已上传,欢迎下载交流

酷狗音乐的爬取,基于python,从无到有完整教程-下:功能代码讲解相关推荐

  1. 酷狗音乐的爬取,基于python,从无到有完整教程-上:搭建环境及爬取原理讲解

    酷狗音乐的爬取,基于python,从无到有完整教程,使用微软新edge作为虚拟浏览器 搭建环境及爬取原理讲解 ⬇⬇⬇ 编码环境及工具准备: 编码工具:PyCharm 所需的库: import requ ...

  2. python爬取酷狗音乐_Python爬取酷狗音乐

    在常见的几个音乐网站里,酷狗可以说是最好爬取的啦,什么弯都没有,也没加密啥的,所以最适合小白入门爬虫 本篇针对爬虫零基础的小白,所以每一步骤我都截图并详细解释了,其实我自己看着都啰嗦,归根到底就是两个 ...

  3. Python学习MongoDB之酷狗音乐数据爬取与上传

    发现URL规律,构建url,使用BeautifulSoup解析 url = 'https://www.kugou.com/yy/rank/home/1-8888.html?from=rank' url ...

  4. 最新酷狗音乐反爬来袭,Python掌握酷狗排行榜加密规则

    大家好 ,我是辣条. 对你有用的话记得三连呦! 效果展示 爬取目标 网址:酷我音乐 工具使用 开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests ...

  5. python爬取酷狗音乐_python爬取酷狗音乐播放地址

    [Python] 纯文本查看 复制代码# -*- coding:utf8 -*- import sys import requests import re import json reload(sys ...

  6. python爬取酷狗音乐top500_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧!

    soup.select('.pc_temp_songlist > ul > li >a') 同样对歌曲时长的分析方法也如上,对 select 的具体用法可参考如下

  7. Python爬虫爬取某小说网的教程(含全代码)#大佬勿喷

    1.主要使用三个库 import parsel import requests import os 2.利用parsel解析网页 3.利用os库保存一本小说 4.链接上 小说专题: https://w ...

  8. 酷狗android平板,安卓平板车载共享 体验酷狗音乐HD版

    安卓平板车载共享 体验酷狗音乐HD版 2013年04月24日 13:53作者:马承平编辑:马承平文章出处:泡泡网原创 分享 泡泡网影音相关频道4月24日 自苹果iPad及各品牌Android平板面世以 ...

  9. python爬取酷狗音乐top500_python获取酷狗音乐top500的下载地址 MP3格式

    下面先给大家介绍下python获取酷狗音乐top500的下载地址 MP3格式,具体代码如下所示: # -*- coding: utf-8 -*- # @Time : 2018/4/16 # @File ...

最新文章

  1. 深入理解JavaScript定时函数setTimeout
  2. 国内外交互体验很好的十款验证码
  3. NPS的几个技术点(在Win 2003中称为Internet 验证服务)
  4. 拿下京东榜单第五首战告捷,看联想手机如何上演王者归来
  5. 从5个函数带你理解K8s DeltaFIFO
  6. 麒麟985曝光!华为Mate 30或首发:标配5G 性能大增
  7. android 实现 效果代码,Android实现雷达View效果的示例代码
  8. 前端面试题目笔记-5
  9. python第三方库安装(复习)
  10. 爬虫入门【10】Pyspider框架简介及安装说明
  11. 【6G】算力网络技术白皮书整理
  12. java单例模式使用_Java单例模式的应用
  13. 暴力破解西电校园网密码
  14. 基于CST电磁仿真软件的波导弯头设计
  15. java中items是什么意思,Ansible - 如何使用with_items中的寄存器名称
  16. ABAQUS子程序技术文档-UEL
  17. EXTJS动态载入组件定义文件并初始化组件,动态构造界面的方法.
  18. 嘉兴 机器人仓库 菜鸟_菜鸟在嘉兴推出全新智能仓 在“双11”启用超级机器人仓群...
  19. win10 win7 php,win10装win7双系统引导
  20. 【Some】【心学】心学精华,人生要旨

热门文章

  1. 东芝面向消费设备和工业设备推出基于Arm(R) Cortex(R)-M3且具备先进功能的低功耗微控制器
  2. 操作系统实验:文件管理 C语言
  3. 技术人员需要一点匪气
  4. 基于C# .NET的常用快递接口调用代码实例
  5. 7x7换成3个3x3卷积
  6. 【离散数学期复习系列】四、图
  7. HTML非主体结构元素
  8. 【C++编程题】买房与选房(排序,模拟)
  9. 车站信号计算机联锁系统英语,电气大纲车站信号计算机联锁系统教学大纲
  10. 特步与AWS合作,“跑”出行业全球品牌发展新“配速”