本文分为两个部分:基础知识和正文,其中基础知识包括什么正则表达式以及Beautifulsoup4的使用。

一、正则表达式

正则表达式用于字符串查找、合法性检查以及作为程序员的工具箱使用。

字符串查找:例如在文本中查找一个子字符串‘python’,或者在一串HTML代码中查找URL地址

合法性检查:例如检查在网站上输入的邮箱地址是否正确

程序员的工具箱:正则表达式模式匹配的起源是Unix的命令grep,它会打印出和给定正则表达式批评为的所有输入行

正则表达式含有三种基本操作:
1.连接操作:例如AB,指定语言{AB}表明这是一个由两个字符组成的字符串,由A和B连接而成

2.或操作:用‘|’表示这个操作,表明指定多种可能的匹配,例如:‘A|B|C’,指定语言{A,B,C},连接操作优先于或操作

3.闭包操作:用‘*’表示这个操作,表明前面的字符重复任意次,例如A*B指定的语言由一个A和0个或多个B的字符串,闭包操作优先于连接操作

总的来说,闭包操作>连接操作>或操作,使用括号‘()’可以改变默认的优先级顺序,例如A(AC|BD)D指定语言是{CACD,CBD}.

使用正则表达式的缩略写法,可以使表达式更加简洁,小巧

1.字符集描述符

‘.’点是一个能够表示任意字符的通配符,例如:A.B表明A连接任意字符再连接B

‘^’表示任意非该括号内的字符,例如:[^AEIOU]

‘-’指定范围,例如[A-Z],表明匹配所有大写的26个字母

2.闭包简写

‘+’表示至少复制一次

‘?’表示重复0次或1次

‘{}’花括号内的数字可以指定任意重复的次数,例如:[0-9]{3}匹配任意三位数

3.转义序列

‘\\’表示‘\’

‘\n’表示换行符

‘\t’表示制表符

‘\s’表示任意空白字符

4.预定义字符集

‘\d’ 数字[0-9]

‘\D’ 非数字[^\d]

'\s'空白字符[\t\r\n\f\v]

'\S'非空白字符[^\s]

'\w'单词字符[a-zA-Z0-9]

'\W'非单词字符[^\w]

问答:正则表达式中'[]'和'()'分别表示什么意思?答:[]匹配的是一个字符,()匹配的是一串字符

二、BeautifulSoup4

写来写去还是上一份中文文档最好

BeautifulSoup4.2.0中文文档

三、分析网易云音乐歌单页面源代码

由于我们想要的列表信息在<iframe>内联框架中,使用urllib3或者requests无法爬取到内联框架的内容,因此我们使用selenium获取<iframe>框架的内容

from selenium import webdriver
from bs4 import BeautifulSouppath='/User/nakau/Download/chromedriver'
url='https://music.163.com/#/playlist?id=90771773'
driver=webdriver.Chrome(path)
driver.get(url)
driver.switch_to.frame('g_frame')
# 如果报错missing value值,则将Chrome与Chromedriver更新到最新soup=BeautifulSoup(driver.page_source, 'lxml')

在爬取的页面右击可以查看网页框架源代码,分析发现,只要将原URL中的‘/#’去掉,就可以爬取到<iframe>框架的内容,然而此种方式只能得到歌曲名称列表,无法得到完整的HTML内容

from bs4 import BeautifulSoup
import requestsurl='https://music.163.com/#/playlist?id=90771773'
url=url.replace('/#','')
html=requests.get(url)
soup=BeautifulSoup(html,'lxml')

通过比较,发现使用requests的包解析速度比selenium快很多。

得到soup后我们就可以开心的我们想要的任何内容了

# 以下使用selenium方式获取到的soupimport re# 获取用户名
string=soup.title.string
obj=re.compile('.*喜欢的音乐')
username=obj.findall(string)[0] #obj.findall 获取到的是一个list,此处获取list中的元素值# 获取歌单列表包含歌曲名称,歌曲作者,歌曲专辑
trlist=soup.tbody.find_all('tr')
songlist=[]
for each in trlist:aux=[]aux.append(each.find('b')['title'].replace('\xa0',' ')temp=each.find_all('div','text')aux.append(temp[0].span['title'].replace('\xa0',' ')aux.append(temp[1].a['title'].replace('\xa0',' ')songlist.append(aux)#导出为CSV文件songlist.to_csv('%s.csv' % username)

至此,我们可以得到一份如下的歌单列表

用python爬取网易云音乐歌单列表相关推荐

  1. Python爬取网易云音乐歌单内所有歌曲

    一.目标: 下载网易云音乐热门歌单 二.用到的模块: requests,multiprocessing,re. 三.步骤: (1)页面分析:首先打开网易云音乐,选择热门歌单,可以看到以下歌单列表,然后 ...

  2. python爬取网易云音乐歌单_【python】爬取并批量下载网易云歌单,嗨翻暑假!

    [Python] 纯文本查看 复制代码# 利用 Selenium 抓取淘宝商品并用 PyQuery 解析得到商品的图片.名称.价格.购买人数. # 店铺名称.店铺所在地信息,并将其保存到MongoDB ...

  3. selenium切换iframe框架案例——翻页爬取网易云音乐歌单作者和名称

    翻页爬取网易云音乐歌单作者和标题 案例目的: 通过翻页selenium操作网易云音乐,介绍如何切换iframe框架以及如何使用selenium定位数据所在的节点. 代码功能: 输入下载的数据页数,自动 ...

  4. Python爬取网易云音乐歌单名以及歌单标签

    爬取网易云音乐歌单名以及歌单标签 正则表达式 .可以匹配任意字符,所以:要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个 ...

  5. python爬取音乐歌曲大全_Python爬取网易云音乐歌单歌曲

    # 从网易云音乐下载歌单歌曲 # 参考了这些网址 # https://blog.csdn.net/Ciiiiiing/article/details/62434438 # https://github ...

  6. 利用python爬取网易云心爱歌单

    一 cookie是什么东西? 小饼干?糖果?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问的时候只要亮一下你的卡片(co ...

  7. python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

    目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...

  8. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜 python爬取网易云音乐热歌榜实例代码...

    想了解python爬取网易云音乐热歌榜实例代码的相关内容吗,FXL在本文为您仔细讲解python爬取网易云音乐热歌榜的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:python,网易热歌榜 ...

  9. python爬取网易云音乐飙升榜音乐_python爬取网易云音乐热歌榜实例代码

    首先找到要下载的歌曲排行榜的链接,这里用的是: https://music.163.com/discover/toplist?id=3778678 然后更改你要保存的目录,目录要先建立好文件夹,例如我 ...

最新文章

  1. 尺度不变特征变换匹配算法详解
  2. 人脸对齐--Face Alignment In-the-Wild: A Survey
  3. cordova media android不播放声音,cordova-plugin-media 录音并打包上传
  4. 2022-01-04
  5. CodeForces - 1189B Number Circle
  6. Why you have so few friends?
  7. Oracle 彻底 kill session
  8. 《大数据》第1期“专题”——大数据与高性能计算
  9. vue项目打包部署linux_Vue项目打包部署到Nginx服务器
  10. 马化腾不“爱”刘强东了?
  11. js和php中几种生成验证码的方式
  12. vc中运行外部程序的方法
  13. 南京大学杨杨计算机,国际交流,研途有术 | 博士生国际学术交流经验分享会(四)...
  14. 服务器宕机可能的原因以及服务器宕机解决办法
  15. 计算机的实现的理论基础
  16. Java打印变量的参数类型
  17. 戴尔计算机亮度如何调整,官方数据:如何调整Dell显示器的亮度
  18. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  19. 统计字符串中各类字符的个数
  20. 如何快速打开.pos

热门文章

  1. dede关键词维护自动加内链锚文本
  2. android 8 忘记图案,手机绘图解锁忘了怎么办?三种方法教你轻松搞定
  3. 怎么在Linux上下载并安装ESET NOD32 Antivirus 4桌面版
  4. python文件的两种类型进制文件,Python之基于十六进制判断文件类型
  5. 拉马努金公式计算圆周率 Python 3.7
  6. 分不清ARM和X86架构,来看看服务器的产品形态
  7. NX二次开发 获取基准坐标系特征的坐标原点、基准轴、基准面对象 UF_MODL_ask_datum_csys_components
  8. app推广员工作面试时应该注意什么
  9. Java使用JNA进行读卡器的开发与封装示例
  10. spark left join 和 right join 的坑