分享好友 最新资讯首页 最新资讯分类 切换频道
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2024-12-29 05:04

前言

Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析

要想学好爬虫,必须把基础打扎实,之前发布了两篇文章,分别是使用XPATH和requests爬取网页,今天的文章是学习Beautiful Soup并通过一个例子来实现如何使用Beautiful Soup爬取网页。

什么是Beautiful Soup

  • Beautiful Soup是一款高效的Python网页解析分析工具,可以用于解析HTL和XML文件并从中提取数据。
  • Beautiful Soup输入文件的默认编码是Unicode,输出文件的编码是UTF-8。
  • Beautiful Soup具有将输入文件自动补全的功能,如果输入的HTML文件的title标签没有闭合,则在输出的文件中会自动补全</title>,并且还可以将格式混乱的输入文件按照标准的缩进格式输出。

Beautiful Soup要和其他的解析器搭配使用,例如Python标准库中的HTML解析器和其他第三方的lxml解析器,由于lxml解析器速度快、容错能力强,因此一般和Beautiful Soup搭配使用。

初始化Beautiful Soup对象的代码:

只需把第二个参数写成”lxml”即可使用lxml解析器初始化Beautiful Soup对象。

Beautiful Soup提供了三种选择器用去爬取节点中的数据,分别是节点选择器、方法选择器和CSS选择器。下面分别介绍着三个选择器的用法。

节点选择器:

HTML网页有title、p、a、head、tr、td等节点。通过Beautiful Soup对象+”.”+节点即可直接访问到节点。 Beautiful Soup对象+”.”+节点+”.”+string即可提取到节点的文本信息。

用法 描述 soup.title 选择第一个title节点 soup.title.string 提取第一个title节点的文本信息 soup.title.attrs 获取第一个title节点的所有属性,返回的结果的词典。
如果有class属性,则class属性返回的是list,class属性之间以空格当做分隔符 soup.p.contents 获取第一个p节点的所有直接子节点。
该方法返回的是第一个p节点中包含的所有直接子字节点和文本,
不包含孙节点,两个节点之间的文本也当做是一个节点返回。
返回的结果是列表 soup.p.children 返回第一个p节点的所有直接子节点,返回的结果是list_iterator对象 soup.p.descendants 获取第一个p节点的所有子孙节点 soup.a.parent 获取第一个a节点的父节点 soup.a.parents 获取第一个a节点的所有祖先节点 soup.p.next_siblings 获取第一个p节点的下一个兄弟节点 soup.p.previous_siblings 获取第一个p节点的上一个兄弟节点

方法选择器:

根据传入的参数查找符合条件的节点。 下面是方法选择器提供的方法:

方法 描述 find_all(name,attrs,recursive,text,**kwargs) 根据传入参数查找所有符合条件的节点,
name是节点名,attrs属性值,text文本内容等。
text参数可以是字符串,也可以是正则表达式:
soup.find_all(text=re.compile(‘test')) find(name,attrs,recursive,text,**kwargs) 返回第一个符合条件的节点 find_parents() 返回所有祖先节点 find_parent() 返回父节点 find_next_siblings() 往后查找,所有兄弟节点 find_next_sibling() 往后查找,返回第一个兄弟节点 find_previous_siblings() 往前查找,返回所有兄弟节点 find_previous_sibling() 往前查找,返回第一个兄弟节点

在使用上面的方法时,如果参数中有Python的关键字,则需要在参数下面加一个下划线,例如下面的代码,class是Python的关键字,必须在class后加下划线class_=”title_class”:

CSS选择器:

BeautifulSoup还支持获取css元素,例如ul、div、li等元素。CSS选择器主要提供select()方法获取符合条件的节点(Tag对象),然后通过节点的get_text()方法和text属性可以获取该节点的文本值。

select方法还可以根据css的样式规则选择相应的节点:

下面使用Beautiful Soup爬取豆瓣音乐排行榜。 在浏览器中打开豆瓣音乐排行榜,打开浏览器,输入网址:https://music.douban.com/chart,我们要抓取的是每首歌曲的排名、歌曲名、演唱者、播放次数、上榜天数等数据。

下面分析怎么通过beautiful soup抓取到我们的数据。 通过开发者工具,我们可以看到所有歌曲是在class为article的div中,然后每首个在class为clearfix的li中。

因此首先使用css选择器获取到class为article下面的所有li节点:

然后查看每首歌曲的html代码:

红色框部分是一首歌的html代码。 歌曲排名在class为“gree-num-box”的span节点中,因为span节点是<li class="clearfix">节点的子节点,获取排名的代码为:li.span.text

绿色框中A节点中是歌曲的链接和图片链接,获取歌曲链接的代码为:li.a['href']

蓝色框中是歌曲的名字、演唱者和播放次数,歌曲名是在class=”icon-play”的H3节点中,因此可以使用方法选择器中的find()方法获取到H3节点,然后获取H3节点下面a节点中的文本信息就是歌曲的名字,代码为:

获取演唱者和播放次数的代码为:

获取上榜天数的代码为:

在豆瓣音乐排行榜的页面一个现实20首歌曲,前面10首歌曲会有图片,后面10首歌曲是没有图片的,因此后面10首歌曲将不获取图片的地址。

另外还有一点需要注意的是,后面10首歌曲的演唱者和播放次数是在class=”icon-play”的p节点中:

而该节点中有a节点,要想获取a节点外的信息,必须使用节点选择器的contents方法: li.find(class_="intro").p.contents[2].strip() contents返回的是p节点的直接子节点,以列表的形式返回,这里返回列表中有3个元素,分别是<p>后的字符串,a节点、演唱者/播次数。contents会将直接子节点之间的换行符也当做一个元素。 代码整理后如下:

本文通过爬取豆瓣音乐排行榜的小项目学习了如何使用Beautiful Soup的节点选择器、方法选择器、CSS选择器来爬取一个网页。这三个选择器可以混合搭配使用。

最新文章
眼见不一定为实 AI合成诈骗属于从重处罚类型
最近,“张文宏深夜带货”引发网友关注。据报道,在“般画234”的视频账号中,“张文宏”在反复介绍一款蛋白棒。针对此事,张文
遇到安全网络错误,我们该如何解决?
安全网络错误是用户在访问互联网时经常遇到的问题,它可能由多种因素引起,以下是一些常见的原因及其对应的解决方法:1、: 浏览
莱茵生物跌0.36%,成交额1.48亿元,今日主力净流入1108.53万
12月16日,(维权)跌0.36%,成交额1.48亿元,换手率3.43%,总市值62.03亿元。根据AI大模型测算莱茵生物后市走势。短期趋势看,
耶尔智能锁全国客服热线-耶尔智能锁说明书
耶尔智能锁全市24小时售后服务热线:400-966-8255 (温馨提示:点击即可拨打热线)耶尔智能锁24小时人工服务电话号码全国网点:40
蛙漫2(台版)软件功能
蛙漫2(台版)APP采用先进的阅读引擎,确保用户在阅读过程中不会出现卡顿、加载缓慢等问题。同时,软件还支持多种阅读模式,如单页
深圳企业在线崛起,揭秘网站优化与推广的制胜之道
深圳网站优化及推广是企业在线崛起的关键。通过精准SEO策略、社交媒体营销和内容推广,提升网站排名,扩大品牌影响力,实现线上
有什么好用的国外建站网站?
网站是品牌的延伸,是个人展示自己的良好窗口,不管是企业还是个人,都可以创建一个自己的网站。鉴于大多数人都是技术小白,不懂
聚时科技CEO郑军应邀出席中国半导体封测年会 用AI深度学习加速半导体封测创新
由中国半导体行业协会封装分会、天水市人民政府主办的第十八届中国半导体封装测试技术与市场年会,于11月8-10日在天水市举行。随
李跳跳真实好友app
你是否想检测下自己微信有多少个互相都是好友的账号?那么可以试着使用李跳跳真实好友app,这是由个人制作的一款检测辅助软件,
腾讯云10元学生机优惠,学生专属云服务体验!
腾讯云10元学生机优惠,学生专属云服务体验!在数字化时代,云计算已经成为推动科技创新和产业升级的重要力量。对于广大学生群体