网易云爬虫教程
时间:2021-01-26
本文章向大家介绍网易云爬虫教程,主要包括网易云爬虫教程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
import requests #用于发起网络请求 from lxml import etree #解析数据 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36' } # 请求头 #1、网易云音乐热歌榜页面地址 url = "https://music.163.com/discover/toplist?id=3778678" # 2、通过网址进入网站获取网页数据 response = requests.get(url,headers = headers) #print(response) #获取响应 # <Response [200]> 200是什么? 状态码 表示同意请求 #print(response.text) #获取网页的源代码 # 3、筛选想要的目标数据 data = etree.HTML(response.text) #获取网页源代码,并将源代码转化为能被xpath匹配的格式,此处HTML必须大写 music_list = data.xpath('//a[contains(@href,"/song?")]') #全文扫描查找符合指定条件的内容,并以列表的形式返回 # print(music_list) #查看返回的列表 # 4、列表进行拆分并显示 for music in music_list: href = music.xpath('./@href')[0] #上面返回的列表依然不是最终想要的,所以还需在当前节点下查找指定条件的内容 # print(href) music_id = href.split('=')[1] # 使用关键字split 从查找到的内容中截取自己想要的 music_name = music.xpath('./text()')[0] #获取当前节点下的文本内容(此处是获取歌曲的名字) print(music_id) url_base = "http://music.163.com/song/media/outer/url?id=" #定义下载接口 music = requests.get(url_base+music_id, headers = headers) #获取音乐 with open('./music/' + music_name + '.mp3', 'wb') as file: #保存音乐文件 file.write(music.content) print(music_name + '下载成功') #提示 # 爬取网易云音乐 # 1、首先获取网页的地址 # 2、通过关键requests向网页发起请求,请求通过后即可抓取网页的数据 # 3、解析数据(获取歌曲的ID):直接抓取到的数据通常不是我们想要的,这时候就需要通过etree来进行数据解析,这个过程中通常会用到关键字 # xpath(xpath详细讲解:https://www.cnblogs.com/it-tsz/p/8899161.html)。XPath 是一门在 XML 文档中查找信息的语言。 # XPath 可用来在 XML 文档中对元素和属性进行遍历。 # xpath常见的几种使用方法: # 1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。 # 2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作 # 3) /text() 获取当前路径下的文本内容 # 4) /@xxxx 提取当前路径下标签的属性值 # 5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。 # 6) . 点 用来选取当前节点 # 7) .. 双点 选取当前节点的父节点 # 代码中的第23行使用的就是第4和第6种方法来获取当前路径当前节点下标签的属性值的。 # 4、第29行:将歌曲的下载链接赋值给一个变量 # 5、第31行:将获取到的歌曲ID置于下载链接的末端,从而下载歌曲 # 6、第33、34行:使用open函数将下载的歌曲以二进制写入的方式保存到music 文件夹中,每首歌曲以获取的歌曲名命名,保存为 # MP3的格式,注意此处的music文件夹需手动在脚本所在目录下创建 # 7、每首歌曲下载成功后会以“歌名+下载成功”的方式提示
原文地址:https://www.cnblogs.com/wangxk/p/14332709.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于 JavaScript 中 null 的一切
- 总结 | DataFrame、Series、array、tensor的创建及相互转化
- 这就是你日日夜夜想要的docker!!!---------Harbor私有仓库
- Go by Example 中文版: 写文件
- PWN:House Of Force
- Windwos10下使用VS2017搭建cocos2d-x 4.0开发环境
- JavaScript 中的函数式编程:函数,组合和柯里化
- 如何设置一个生产级别的高可用etcd集群
- NVIDIA Jetson nano可以处理4K相机吗?来验证编码性能吧(中)
- House Of Lore原理学习
- 使用 rush 进行命令并行处理
- 老生常谈 Spring Aop 日志收集与处理做的工具包,贼好用?
- Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
- Go by Example 中文版: 行过滤器
- Elasticsearch重要知识点 | 选举流程详解