先看结果

导入模块

import requests
from bs4 import BeautifulSoup

其中request模块用来获取网页的html数据,BeautifulSoup用于解析获取到的html数据

获取html数据

我们通常用request.get("网址")的方法来获得一个网站的html数据,但是由于许多网站的反爬机制,我们可以把自己伪装成一个浏览器,具体操作如下:

打开要爬网站的开发者工具

以这次的网站音乐排行榜为例,我们在进入该网站之后按键盘上的F12就可以进入开发者工具

打开“网络”界面

edge浏览器操作如下

其余浏览器打开“Network”

刷新网站

F5刷新

获取User-Agent

在左栏选中第一个,然后右侧窗口拉到底就复制得到浏览器的User-Agent

传入headers参数

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183"}

新建一个字典headers然后把刚刚复制的内容作为值存放到里面,相应键的名称为“User-Agent”

response = requests.get("https://y.qq.com/n/ryqq/toplist/26",headers = headers)

然后我们在括号内添加上headers=headers

print(response.text)

text的形式把response打印出来,可以判断是否成功获取到

如果打印出了一大串这样的东西说明成功获取到 html数据了!

解析html数据

html = response.text
soup = BeautifulSoup(html,"html.parser")
info = []

首先我们将得到的内容作为字符串存放到html这个变量中

然后把这个内容传入BeautifulSoup的构造函数里,并添加上解析器"html.parser",然后把这个对象赋值为soup

列表info用于存储之后解析出的数据

获取所有歌手名

点击开发者工具页面左上角这个图标可以开启“指哪打哪”

将鼠标放到网页上相应的元素上就能在开发者工具页面显示相应的html代码

我们把鼠标放在任意一个歌手名上会看到窗口展示了这样的代码

在观察每一个含歌手名的代码后,会发现所有的歌手名都包含在了<div>标签内,但是<div>标签有很多,为了不把不相干的信息提取出来,我们可以再去寻找这些代码的共同特点,发现他们都含有class="playlist__author",于是我们可以这样写代码

all_names = soup.findAll("div",attrs={"class":"songlist__artist"})#提取全部含有歌手名的元素

findAll函数找到相应的元素,第一个参数传入“div”表示找到所有<div>标签,然后传入可选参数attrs赋值为一个字典,键值对用来存放想找的属性和值。也就是class属性所有含songlist__artist的元素。然后把整个赋值给all_names,他是一个可迭代对象。

for names in all_names:print(names)

循环打印即可得到下面内容

可以看到所有包含歌手名的元素被打印了出来,但是我们只想要歌手名,不要其他字符

for names in all_names:#往info添加歌手名信息name_link = names.find("a")info.append([name_link.string])

在循环里,通过find()函数我们找到全部的<a>标签,然后赋值给name_link此时的name_link应该是如下内容

这时我们用name_link.string就能直接读取到我们想要的内容了,然后存入info

获取所有歌名和专辑名

方法与上面类似,我们对所有歌名和专辑名进行分析

发现他们都存在<span>标签内,而且class属性都为songlist__songname__txt

于是我们可以写出下面的代码

all_songs = soup.findAll("span",attrs={"class":"songlist__songname_txt"})

然后把获取的内容存到info里

idx = 0#记录当前遍历到列表的索引号
for songs in all_songs:#往info添加歌名以及专辑名信息song_link = songs.findAll("a")for t in song_link: info[idx].append(t["title"])idx += 1

在这次获取时,我用了一个不一样的办法,因为在拿到<a>标签里的内容后仍然存在很多我们不想要的信息

但观察后发现所有歌名和专辑名前面都有"title=",所以我们可以使用列表推导式从每个<a>标签中提取title属性,并将结果存储在列表info中。

到这里为止我们已经解析到了全部的内容

为代码增加实用性

由于提供的榜单有很多,但是这个代码只能获取到其中的一种榜单,实用性不高

我们点开不同的榜单观察他们的url

每个榜单的URL有区别的地方只在于最后的数字所以可以对之前获取html数据的代码进行修改

response = requests.get(f"https://y.qq.com/n/ryqq/toplist/{num}",headers = headers)

新创建一个变量num用于存放数字,然后用f字符串把他放在URL的最后代替掉固定的数字

然后我们把允许用户查询的榜单和对应的URL最后的数字存放在字典top中,然后写一些便于用户输入的代码以及最终输出榜单内容的代码,就完成了!

附上源码:

import requests
from bs4 import BeautifulSoup
top = {62:"飙升榜",26:"热歌榜",27:"新歌榜",4:"流行指数榜",5:"内地榜",3:"欧美榜",16:"韩国榜",17:"日本榜",105:"日本公信榜",28:"网络歌曲榜",63:"DJ舞曲榜",60:"抖音快手榜",128:"YouTube榜",57:"电音榜",65:"国风榜",58:"说唱榜",72:"动漫音乐榜",73:"游戏音乐榜"}
print(top)
while True:num = int(input("请输入你要查看的榜单号码:"))if num not in top:print("无该榜单,请重新输入!")else:break
#获取html数据
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183"}
response = requests.get(f"https://y.qq.com/n/ryqq/toplist/{num}",headers = headers)html = response.text
soup = BeautifulSoup(html,"html.parser")
info = []#存放提取到的信息
all_songs = soup.findAll("span",attrs={"class":"songlist__songname_txt"})#提取全部含有歌名以及专辑名的元素
all_names = soup.findAll("div",attrs={"class":"songlist__artist"})#提取全部含有歌手名的元素
for names in all_names:#往info添加歌手名信息name_link = names.find("a")info.append([name_link.string])
idx = 0#记录当前遍历到列表的索引号
for songs in all_songs:#往info添加歌名以及专辑名信息song_link = songs.findAll("a")for t in song_link: info[idx].append(t["title"])idx += 1
print(top[num])
for i in range(len(info)):#输出info中的信息print(i+1,"歌手:",info[i][0],"\n","\t歌曲:","《",info[i][2],"》","\n","\t专辑:","《",info[i][1],"》")

【爬虫入门】爬取音乐排行榜相关推荐

  1. 爬虫入门--爬取就业网站上的岗位信息构造数据集

    爬虫入门--爬取就业网站上的岗位信息.解析爬取的数据构造数据集 爬虫入门实践 爬虫的基本概念 爬虫的技术实现 爬虫入门实践 大家好!随着大数据分析逐渐火热的今天,爬虫技能也成了数据分析师一项不可或缺的 ...

  2. 爬虫入门——爬取QQ音乐某一歌手前五首歌曲信息及相关评论

    文章目录 前言 一.查看信息 二.代码实现 总结 前言 python课作业 请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌 ...

  3. python爬取豆瓣电影信息_Python爬虫入门 | 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  4. python爬虫 多线程 爬取网站排行榜上的所有小说

    python爬虫,多线程批量爬取多部小说 欢迎阅读 环境 获取排行榜top上的所有小说地址 分析排行榜top100页面的html,获取所有小说的url 遍历小说列表url到生成txt 多线程启动爬取任 ...

  5. python爬虫电影信息_Python爬虫入门 | 爬取豆瓣电影信息

    这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬 ...

  6. python3 协程爬虫,爬取豆瓣排行榜json数据

    python携程爬取豆瓣电影排行榜json接口数据.仅学习使用,如有侵权.请联系删除 不说废话直接贴代码,大体方法一样,解析方式不同 #python3 jupyter import asyncio i ...

  7. Python简单爬虫入门-爬取链家租房网上的租房信息

    .又到了毕业季,租房成为广大毕业生关注的话题,考虑到只用到广州的租房信息,所以只爬取广州各个地区的租房信息,下面是用Python3.4.4编写简单爬虫爬取租房网信息的代码: #coding:utf-8 ...

  8. Python爬虫入门——爬取贴吧图片

    最近忽然想听一首老歌,"I believe" 于是到网上去搜,把几乎所有的版本的MV都看了一遍(也是够无聊的),最喜欢的还是最初版的<我的野蛮女友>电影主题曲的哪个版本 ...

  9. python爬虫入门爬取lpl选手价值排行榜

    代码: import requests from bs4 import BeautifulSoup import bs4 def getHTMLText(url):try:r = requests.g ...

  10. 爬虫入门-爬取有道在线翻译结果(2)

    由于服务器会识别访问的对象是否为代码并加以限制,所以需要加上一定的措施隐藏代码身份.以上节有道为例: 1.添加headers信息: 在生成request对象时添加headers信息中的User-Age ...

最新文章

  1. php随机数、时间、字符串函数,正则,数组函数
  2. Django(part36)--cookies
  3. 《Python游戏编程入门》——1.2 初识Python
  4. Spring框架 声明式事务
  5. C++的三大特性之一继承
  6. 并发容器——ConcurrentHashMap
  7. “迭代期内无变更”与敏捷开发产品版本规划
  8. wordpress 调用css,WordPress折腾记-精简CSS及JS在插件中的调用
  9. Android TextView和EditText属性详解
  10. 武汉工程大学matlab,Lorenz系统动力学行为的MATLAB仿真与分析[1]
  11. Cortex m0+笔记
  12. 安装操作系统找不到任何驱动器的解决方法
  13. dnf第七章waiguaⅢ∨dnf第七章好感度【=dnf第七章免费外挂
  14. 华为如何不关闭进程_关闭华为手机后台程序的小技巧,终于知道了,再也不用担心内存了...
  15. All One Needs to Know about Metaverse
  16. 记录学习向量的铭心刻骨的句子
  17. 直播新架构升级:全量支撑淘宝双11直播
  18. 计算机专业英语一国家线,从以往国家公布的数据,客观来看2010年英语国家线...
  19. FastAdmin 多表联查 踩坑
  20. GNOME 平台的2D图形编程(GTK,GDK,Cairo...) 简介 [转]

热门文章

  1. IE下input密码框右侧的小眼睛
  2. realvncserver黑屏_rhel6.3 VNC 黑屏|不黑屏但是桌面上什么都没有
  3. 从入门到入土:学习|实例练手|获取裁判决定网|Selenium出击|绕过反爬机制|实现批量下载裁决书|狗头保命|仅用于学习交流|Selenium自动化操作
  4. python掷骰子while循环_初学者Python:骰子游戏,while循环实现
  5. 用AI加码,CES Asia 2018将如何成就珍贵稀缺的科技盛会?
  6. 软件测试 | 测试开发 | 什么是流程管理平台?
  7. 菲律宾云服务器怎么样,菲律宾云服务器新手使用指南
  8. Redis未授权访问漏洞实验
  9. CSS基础:float浮动属性的使用浮动的影响
  10. 艾伦的另外一首歌 谢谢爱,根据I'll be fine改编