python3 xpath_Python3使用Xpath解析网易云音乐歌手页面
Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索。通过简洁明了的路径选择表达式,它提供了强大的选择功能;同时得益于其内置的丰富的函数,它可以匹配和处理字符串、数值、时间等数据格式,几乎所有节点我们都可以通过Xpath来定位。
在Python中,lxml库为我们提供了完整的Xpath选择器,今天我们就用它来学习Xpath的使用,我们的目标是用最少的时间来掌握使用频率最高的核心技能,而这些核心技能基本上可以满足我们网页抓取的需求。
毕竟我们不是单独在使用Xpath,在Python中,很多数据处理和匹配的工作我们可以用更加“Python”、更加通用的方法来解决,没必要为了5%的使用而花费数倍的时间。
我们都知道,在很多领域里,从0到80分只需要花费很少的时间,从80分到95分则可能会花费上一阶段的数倍时间,至于从95分往上,每一分的提高都可能需要巨大的时间成本。我们需要权衡最初的学习诉求、收获和时间成本的匹配度等,以判断我们要到达哪一个水平,并规划出对应的学习方案。
我学习爬虫的目的并不是成为一个精通网络爬虫的大师,而是将它作为一个工具,用来帮助我更好地进行数据挖掘分析的工作。因此,在学习过程中会尽可能地功力,力求以最少的时间掌握最核心的技能。Xpath简直是针对这种学习思路设计的,因为它太容易上手了,核心功能只需要十分钟就可以熟练掌握,而那多达上百的函数对我们来说可能一辈子都用不到几回。
一、Xpath常用规则
下表是最常用的Xpath规则,绝大多数的Xpath表达式都由它们构成。
| 表达式 | 描述 | | :-: | :-: | | nodename | 选取此节点的所有子节点 | | / | 从当前节点直接选取子节点 | | // | 从当前节点选取所有子孙节点 | | . | 选取当前节点 | | .. | 选取当前节点的父节点 | | @ | 选取属性 |
二、抓取赵雷热门作品页面
单纯的罗列简直是耍流氓,实战才是硬道理。正如标题所言,今天我们就使用Xpath来解析网易云音乐的歌手页面。我个人很喜欢赵雷,那我们就先尝试解析一下赵雷的热门作品。
网易云音乐抓取难度较低,没有乱七八糟的验证,抓取的时候我们只需要带上header就可以成功获取我们需要的内容了。
首先,我们打开网易云音乐的首页,搜索并进入赵雷的页面。右键检查并切换到Network选项卡,刷新一下,就看到了一大串网络请求,我们要做的就是从中定位到歌曲列表所在的请求。
我们优先看document类的文件,第一个打开后通过preview可以看到这里是通用内容,包含了一些网易云音乐的信息,那么接下来我们看下边这个红框里的请求,首先请求名称里包含了artist以及一个对应的id,看起来有点像。
接下来我们单击进去看看:
我们成功看到了赵雷的热门作品列表,说明我们找对了位置。我们同样可以通过在response里搜索来确定这一请求是否是我们寻找的那一个。比如我们搜索“成都”、“南方姑娘”等,来看下我们的歌曲列表是不是在这个response中。
确定了请求之后,我们就需要抓取并解析了。首先我们切换到Headers选项,在General下找到Request URL作为请求连接;然后在Request Headers下找到‘User-Agent’,并将其复制下来用作模拟浏览器发起请求。
接下来我们尝试抓取页面:
import requests
url = 'https://music.163.com/artist?id=6731'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
html = requests.get(url, headers=headers)
print(html.status_code)
结果如下:200
这说明我们的请求成功了,接下来我们看下html的内容是否符合要求:
print(html.text)
这里打印的结果太长就不贴出来了,我们可以把打印的内容和刚才那个请求返回的结果做一个比对,看是不是一样的内容。通过观察,我们发现这就是我们需要的内容。
三、解析热门作品列表
1. 构建对象
那么接下来就要解析了,解析之前,我们需要先使用lxml构建我们需要的对象:
from lxml import etree
result = etree.HTML(html.text)
print(type(result))
print(result)
输出为:
2. 子节点、子孙节点、属性过滤、文本选取
然后我们观察网页,定位到歌单位置:
我们发现歌曲列表藏在一个
- 标签中,这个标签拥有class="f-hide"属性;
- 标签中嵌套了一个
- 标签;
- 标签中又嵌套了一个标签,这个标签有个href属性,其值为每首歌的相对链接,而歌曲名称就在标签对应的文本中。
好了,接下来我们构建Xpath路径选择表达式:
song_list = result.xpath('//ul[@class="f-hide"]/li/a/text()')
print(song_list)
看下输出:['成都', '南方姑娘', '理想', '画', '我们的时光', '少年锦时', '阿刁', '鼓楼', '三十岁的女人', '无法长大', '八十年代的歌', '十九岁', '彩虹下面', '玛丽', '让我偷偷看你', '吉姆餐厅', '朵', '静下来', '家乡', '已是两条路上的人', '未给姐姐递出的信', '北京的冬天', '孤独', '小屋', '再也不会去丽江', '再见北京', '妈妈', '梦中的哈德森', '人家', '背影', '窑上路', '浮游', '不开的唇', '开往北京的火车', '赵小雷', '往事只能回味', '爱人你在哪里', '未给姐姐递出的信 ', 'Over', '民谣', '凭什么说爱你', '逆流而上', '夏天', '米店', '飞来飞去', '朵儿 (Live版)', '何必', '塔吉汗', '月亮粑粑 (Live)']
好,我们成功解析出了歌曲列表。那么接下来我们回头看一下这个表达式:
首先,我们使用.xpath()方法来调用Xpath表达式;//ul[@class="f-hide"]代表我们选取所有拥有class="f-hide"属性的
标签;/li代表在上边返回的标签的子节点中选取所有的
- 标签,/a同理,进一步选取子节点中的
python3 xpath_Python3使用Xpath解析网易云音乐歌手页面相关推荐
- Python3使用Xpath解析网易云音乐歌手页面
Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索.通过简洁明了的路径选择表达式,它提供了强大的选择功能:同时得益于其内置的丰富的函数,它可以匹配和处理字符串.数值.时间等数据格 ...
- python3爬虫(4):获取网易云音乐歌手所有歌曲及歌曲的精选评论
1. 需要的python包 >pip install pycryptodome >pip install requests >>pip install lxml 2. 实践1: ...
- python3 xpath_Python3使用xpath解析
1.Python3中使用xpath解析循环中的html页面时,一直在重复第一个值,但是print(tr.xpath('string(.)'))这段代码的值一直在循环,怀疑是下面取值的语法不对 代码如下 ...
- python爬虫No.1|爬取网易云音乐歌手的前50首歌曲ID及名字
自学pythonのNo.5 引语 知识总结 Requests XPath 案例 曾经有这样的梗黑网易云音乐 实际上网易云是很不错的音乐软件之一.这个梗挺让我不舒服的,挫折谁都有,矫情没必要但对矫情之人 ...
- Python爬取网易云音乐歌手歌曲和歌单(爬虫)
Python爬取网易云音乐歌手歌曲和歌单 是 仅供学习参考 Python爬取网易云音乐网易云音乐歌手歌曲和歌单,并下载到本地 ①找到要下载歌手歌曲的链接,这里用的是: https://music.16 ...
- Android仿网易云音乐播放页面 背景虚化碟片效果
1.效果图 仿网易云音乐播放页面,主要有4个关键点: 背景虚化.获取音乐的专辑封面,将此图片作为背景图,并进行模糊虚化处理 碟片合成.获取音乐的专辑封面,和黑色碟片图片进行合成 碟片旋转.音乐播放时, ...
- 如何利用python爬虫获取网易云音乐某个歌手简介_Python 爬虫获取网易云音乐歌手信息...
今天就先带大家爬取网易云音乐下的歌手信息并把数据保存下来. 爬取结果 环境 语言:Python 工具:Pycharm 导包 BeautifulSoup:用来解析源码,提取需要的元素. selenium ...
- php 获取字符串首歌,PHP爬虫 网易云音乐歌手和热门歌曲信息抓取
序章 PM最近问我要网易云的歌手的热门歌曲的信息,作为数据分析.说起网络爬虫我们都不陌生,我们分析网站的HTML的格式和URL的通用格式来写相应的算法.然后请求对应的URL来获取HTML字符串,因此总 ...
- 用selenium和BeautifulSoup爬取网易云音乐歌手id
本人正在点亮爬虫技能树,写blog以记录 selenium和bs4介绍 Selenium 自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你 ...
最新文章
- JS+CSS3 360度全景图插件 - Watch3D.js
- 什么是CNN卷积神经网络的感受野及动画演示
- oracle查询保留2位小数
- Py之demjson:Python库之demjson的简介、安装、使用方法详细攻略
- 双指针解决数组排序问题
- net start zabbix agent 服务没有相应控制功能_zabbix-基础系列(十七)--实战之监控 php-fpm...
- flutter 判断是不是调试模式_女人怎么判断男人是不是喜欢自己//男人真正喜欢女人的追求方式...
- nginx phase handler的原理和选择
- 项目中的通用查询参数类,它体现了项目架构的大局观
- OC 自定义 get/set 方法注意点
- 分享24个JS特效广告和66个JS特效在线客服J代码JS代码
- BNS100数码人像采集系统产品说明书
- Python日期时间格式转换
- Ubuntu笔记本使用peek 来录制 gif 动画
- php把amr转换成mp3,php 微信amr转mp3的方法
- linux磁盘分区详解
- Linux连接荣耀路由器pro2,荣耀路由器Pro2与路由存储、远程访问、家庭共享
- 获取与设置windows系统下音频设备音量
- 春考计算机专业PS考点,春考辅导:春考PS的学习方法和技巧
- mysql如何插入图片和视频_mysql中怎样插入图片