Python爬虫案例教学:批量下载某狗所有热门榜单歌曲(附完整源码)
环境
- Python 3.6
- Pycharm
模块使用
import os
import requests
import parsel
import re
# 模块安装
'''
如何安装模块:
1. win + R 输入 cmd 输入安装命令: pip install 模块名 回车
2. pycharm里面安装 terminal 输入安装命令: pip install 模块名 回车 模块安装失败的原因:
1. 提示:pip 不是内部命令 你python环境变量可能没有设置好
2. 有安装进度条显示,但是安装到一半出现报错了 因为python安装模块都是在国外的网址进行下载安装的, 国内请求国外 网速很慢,下载速度大 概只有 几KBread time out 网络连接超时 你可以切换为国内的镜像源
3. 明明在cmd里面安装好了,但是在pycharm 提示我没有这个模块 你pycharm里面python解释器没有设置,你在pycharm设置里面重新设置一下
'''
觉得Python自己学不下去的,或者不知道该怎么学,怎么样把知识变现的?
爬虫的基本思路
数据来源分析
确定需求
通过开发者工具进行抓包分析
代码实现过程
- 发送请求 对于榜单url地址发送请求
- 获取数据 获取网页源代码数据
- 解析数据 提取所有榜单相对应的url地址
- 发送请求 对于 榜单的url地址发送请求
- 获取数据 获取网页源代码数据
- 解析数据 提取音乐 hash 和 id 值
- 发送请求 把 hash 和 id 值 参数相对url里面 发送请求
- 获取数据 获取json字典数据
- 解析数据 提取 歌名 音乐播放地址
- 保存数据
数据来源分析 >>> 发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据
完整代码
filename = 'music\\'
if not os.path.exists(filename):os.mkdir(filename)def change_title(title):pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |'new_title = re.sub(pattern, "_", title) # 替换为下划线return new_title# 1. 发送请求 对于榜单url地址发送请求
url = 'https://www.kugou.com/yy/html/rank.html'
# 请求头 作用: 伪装 把python代码伪装成浏览器发送请求
# 任意一个数据包的 user-agent 都是一样的
# user-agent 表示的就是浏览器的基本信息
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
# 2. 获取数据 获取网页源代码数据
# print(response.text) # html 字符串数据(想直接解析字符串数据 只能用re) 转成 selector 对象
# 3. 解析数据 提取所有榜单相对应的url地址
selector = parsel.Selector(response.text)
# print(selector)
# css选择器 根据标签的内容 提取想要的数据
# 第一次提取 获取li 标签
lis = selector.css('.pc_rank_sidebar li')
lis = lis[13:]
# 返回的是列表, 所以可以遍历 把里面每一个元素提取出来 Selector 对象
for li in lis:title = li.css('a::attr(title)').get()link_url = li.css('a::attr(href)').get()print(f'=====================正在爬取{title}=====================')# print(title, link_url)# 4. 发送请求 对于 榜单的url地址发送请求response_1 = requests.get(url=link_url, headers=headers)# re.findall('')# 5. 获取数据 获取网页源代码数据 response_1.text# print(response_1.text)# 6. 解析数据 提取音乐 hash 和 id 值hash_list = re.findall('"Hash":"(.*?)"', response_1.text)# \d 匹配一个数字 \d+ 匹配多个数字 .*? 可以匹配任意字符 (除了\n)# 正则表达式匹配的数据 返回的是列表album_id = re.findall('"album_id":(\d+),', response_1.text)for index in zip(hash_list, album_id):hash = index[0]music_id = index[1]# 7. 发送请求 把 hash 和 id 值 参数相对url里面 发送请求index_url = 'https://wwwapi.kugou.com/yy/index.php'params = {'r': 'play/getdata',# 'callback': 'jQuery19106964302346548317_1629810585326','hash': hash,'dfid': '1JdWoI2IQjNS2aq9KB1Ylhf3','mid': 'fe0e97001229790f9065ef29dec3bdcd','platid': '4','album_id': music_id,'_': '1629810585327',}response_2 = requests.get(url=index_url, params=params, headers=headers)# json_data = response_2.json()['data']music_name = response_2.json()['data']['audio_name']new_name = change_title(music_name)music_url = response_2.json()['data']['play_url']if music_url:music_content = requests.get(url=music_url, headers=headers).contentwith open(filename + new_name + '.mp3', mode='wb') as f:f.write(music_content)print(music_name)
Python爬虫案例教学:批量下载某狗所有热门榜单歌曲(附完整源码)相关推荐
- Python零基础爬虫之回车桌面壁纸并实现自动换壁纸(内附完整源码)
前言 嗨喽,大家好,这里是魔王~ [课题]: Python零基础爬虫之回车桌面壁纸 [课题介绍]: 壁纸不应该只是一张图片,它应该是一门哲学 回车桌面网100000张无水印,高分辨率,电脑桌面壁纸, ...
- abaqus利用python实现部件合并_python脚本实现abaqus前处理2D多晶粒建模(附完整源码)-Voronoi多边形的生成...
hello,小伙伴们大家下午好呀.今天是2020-12-03. 今天呢,还是讲python脚本,是一个我以前煞费苦心写的,熬死了不少脑细胞写的,今天呢,我就教了大家,我把源码都给你们,让你们省省事. ...
- Python爬虫案例:批量下载超清画质手机壁纸
目录 前言 开发环境 模块使用 基本流程: 一. 数据来源分析 二. 代码实现步骤: 完整代码 1. 发送请求 2. 获取数据 3. 解析数据 4. 保存数据 效果演示 前言 开发环境 Python ...
- 知识图谱实战开发案例剖析(16)-第一个智能对话机器人(附完整源码)
一.前言 这是系列博文<知识图谱实战开发案例剖析>第4部分:知识图谱应用,第16节:第一个智能对话机器人.该系列内容同时已经录制成视频课程,感兴趣的可以访问网易云课堂. 二.正文 2 ...
- Python:实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法(附完整源码)
Python:实现prime sieve eratosthenes埃拉托斯特尼素数筛选法算法 # flake8: noqa def prime_sieve_eratosthenes(num):prim ...
- Python爬虫——利用Scrapy批量下载图片
Python爬虫--利用Scrapy批量下载图片 Scrapy下载图片项目介绍 使用Scrapy下载图片 项目创建 项目预览 创建爬虫文件 项目组件介绍 Scrapy爬虫流程介绍 页面结构分析 定义I ...
- 知识图谱实战案例完全剖析(附完整源码和数据集)-张子良-专题视频课程
知识图谱实战案例完全剖析(附完整源码和数据集)-2070人已学习 课程介绍 课程定位:系统学习知识图谱的佳实践: 系统学习:完全覆盖知识建模.图数据库.知识应用和知识获取: 实战指引: ...
- Python实现恩尼格玛加密算法——附完整源码
Python实现恩尼格玛加密算法--附完整源码 恩尼格玛是第二次世界大战中德国所使用的复杂电机械式密码机.它被认为是世界上最复杂的加密设备之一.在这个项目中,我们将使用Python模拟实现恩尼格玛加密 ...
- Python语言打造智能语音助手——附完整源码
Python语言打造智能语音助手--附完整源码 随着智能家居.智能办公等领域的逐渐兴起,实现语音控制与交互已成为了一种趋势.而Python语言是一门极具魅力的编程语言,其强大的库.简洁的语法以及易于学 ...
最新文章
- Vm-Tools 安装指南
- 2020 年 Java 面试常见 350 题
- 等值线在Google Map上的叠加Extent
- Redis的编译安装
- Nokia的北美困局
- 外媒:已有5家芯片厂商获准继续向华为供货
- 《Java编程思想》读书笔记-对象导论
- 聚类分析原理(及Python实现K-means代码详解)
- CI24R1低成本国产2.4G无线收发器芯片替代XN297精简版SI24R1
- 简单的了解一下MySQL连接查询
- 小米面试offer加油
- stata--异方差处理(3种方法比较)
- 从零搭建WNMP环境
- 基于51单片机的秒表系统设计(源代码+Proteus仿真图)
- javascript:window.scroll()函数behavior属性smooth属性值在iphone浏览器上不兼容
- MySQL三种插入方式
- SVN: E155036:This client is too old to work with working copy…解决方法
- Python爬虫(一):简单小说爬取实例
- html canvas颜色渐变色,HTML5-画布(canvas)效果之-渐变色
- python tkinter entry默认值_Python ---(六)Tkinter窗口组件:Entry
热门文章
- VMware vSphere中三种磁盘模式:精简置备/厚置备置零/厚置备延迟置零
- 小学信息计算机,[原创]小学信息技术名词解释
- linux sed不起作用,Linux:sed工具
- 【转】真实案例引起的对系统健壮性的思考(张逸,2012-02-07)
- 前端项目实战30-多加一个列表表示详情
- 信用卡逾期多久会被判定为判刑
- 小红书笔记打开显示连接不到服务器,小红书笔记看不到全文怎么回事啊?怎么发布小红书笔记?...
- php修改音频文件_php如何实现音频格式转换
- 年薪大佬带你如何使用maya和zbrush制作次世代女性角色?值得收藏
- 查询最近电脑都访问过哪些文件