【爬取音乐,并将音乐信息储存到数据库中】

爬取音乐,并将音乐信息储存到数据库中

  • 确定音乐网站的url并分析网站
  • 分析二级页面
  • 创建数据库
  • 使用Xpath解析,进行多层爬取
  • 保存信息
  • 完整代码
  • 结果

确定音乐网站的url并分析网站

请添加图片描述

分析二级页面

请添加图片描述
请添加图片描述

创建数据库

# 创建一个链接对象
conn = pymysql.connect(host='master', user='root', password='123456', port=3306, db='spider')
# 创建游标
cur = conn.cursor()
sql_createTb = """CREATE TABLE music (id INT NOT NULL AUTO_INCREMENT,title VARCHAR(255),signer  VARCHAR(255),zuoci VARCHAR(255),zuoqu VARCHAR(255),album VARCHAR(255),PRIMARY KEY(id))"""

使用Xpath解析,进行多层爬取

print("开始爬取欧美音乐榜单")
url = 'https://music.xxxxxxx.cn/v3/music/top/eur_usa'
driver_chom = webdriver.Chrome()
driver_chom.get(url)
# 使用xpath解析获取音乐的榜单
music_list = driver_chom.find_elements(By.XPATH, '//div[@id="js_songlist"]/div')
print(music_list)# 进一步获取单个音乐的连接 进入详细页面 获得歌词 歌名 歌手 等信息
for url in music_list:detail_url = url.find_element(By.XPATH,'div[3]/span/a').get_attribute('href')print(detail_url)driver_edge = webdriver.Edge()driver_edge.get(detail_url)time.sleep(6)try:title = driver_edge.find_element(By.XPATH,"//div[@class='info_contain']/h2").textprint(title)singer = driver_edge.find_element(By.XPATH, "//div[@class='info_singer']/a").textprint(singer)zuoci = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[1]/span").textprint(zuoci)zuoqu = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[2]/span").textprint(zuoqu)album = driver_edge.find_element(By.XPATH, "//div[@class='info_about']/p[3]/span/a").textprint(album)

保存信息

# 将歌曲的信息写入到数据库中print("将歌曲的信息写入到数据库中!")number = 0insert_sql = f"insert into music() values({number},'{title}','{singer}','{zuoci}','{zuoqu}','{album}')"try:cur.execute(insert_sql)except Exception as e:# 回滚事件conn.rollback()conn.commit()print("写入完成!")# 数据库的信息写入完毕开始保存歌曲的歌词file = open(f'./output/歌词信息/{title}_{singer}.txt', 'w',encoding='utf-8')try:geci = driver_edge.find_elements(By.XPATH,"/html/body/div[3]/div/div/div/p")for i in geci:file.write(i.text+'\n')except Exception as e:geci = driver_edge.find_element(By.XPATH, "/html/body/div[3]/div/div/div/p")file.write(geci.text+'\n')# 关闭歌词文件写入file.close()

完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# time: 2023/12/7 19:32
import time
import pymysql
from selenium import webdriver
from selenium.webdriver.common.by import By# 创建一个链接对象
conn = pymysql.connect(host='master', user='root', password='123456', port=3306, db='spider')
# 创建游标
cur = conn.cursor()
sql_createTb = """CREATE TABLE music (id INT NOT NULL AUTO_INCREMENT,title VARCHAR(255),signer  VARCHAR(255),zuoci VARCHAR(255),zuoqu VARCHAR(255),album VARCHAR(255),PRIMARY KEY(id))"""
try:cur.execute(sql_createTb)
except Exception as e:# 回滚事件conn.rollback()
conn.commit()
print("数据库建立完毕!")# 爬取咪咕音乐 并且保存到数据库中
# 1.先确当url
print("开始爬取欧美音乐榜单")
url = 'https://music.migu.cn/v3/music/top/eur_usa'
driver_chom = webdriver.Chrome()
driver_chom.get(url)
# 使用xpath解析获取音乐的榜单
music_list = driver_chom.find_elements(By.XPATH, '//div[@id="js_songlist"]/div')
print(music_list)
# 进一步获取单个音乐的连接 进入详细页面 获得歌词 歌名 歌手 等信息
for url in music_list:detail_url = url.find_element(By.XPATH,'div[3]/span/a').get_attribute('href')print(detail_url)driver_edge = webdriver.Edge()driver_edge.get(detail_url)time.sleep(6)try:title = driver_edge.find_element(By.XPATH,"//div[@class='info_contain']/h2").textprint(title)singer = driver_edge.find_element(By.XPATH, "//div[@class='info_singer']/a").textprint(singer)zuoci = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[1]/span").textprint(zuoci)zuoqu = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[2]/span").textprint(zuoqu)album = driver_edge.find_element(By.XPATH, "//div[@class='info_about']/p[3]/span/a").textprint(album)# 将歌曲的信息写入到数据库中print("将歌曲的信息写入到数据库中!")number = 0insert_sql = f"insert into music() values({number},'{title}','{singer}','{zuoci}','{zuoqu}','{album}')"try:cur.execute(insert_sql)except Exception as e:# 回滚事件conn.rollback()conn.commit()print("写入完成!")# 数据库的信息写入完毕开始保存歌曲的歌词file = open(f'./output/歌词信息/{title}_{singer}.txt', 'w',encoding='utf-8')try:geci = driver_edge.find_elements(By.XPATH,"/html/body/div[3]/div/div/div/p")for i in geci:file.write(i.text+'\n')except Exception as e:geci = driver_edge.find_element(By.XPATH, "/html/body/div[3]/div/div/div/p")file.write(geci.text+'\n')# 关闭歌词文件写入file.close()except Exception as f:print("*********************Error*********************")continue
# 关闭数据库访问
cur.close()
conn.close()

结果

在这里插入图片描述
在这里插入图片描述

欢迎学习指正!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/256263.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超大规模集成电路设计----FPGA时序模型及FSM的设计(八)

本文仅供学习,不作任何商业用途,严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----RTL级设计之FSM(八) 7.1 CPLD的时序模型7.1.1 XPLA3 时序模型7.1.…

基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL

简介 CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。CDC 技术的应用场景非常广泛…

【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)三种strlen模拟实现

🌈write in front :🔍个人主页 : 啊森要自信的主页 ✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊! 欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助&am…

mfc140u.dll文件下载的方法指南,教你多种方法修复mfc140u.dll

在面对诸如"mfc140u.dll文件丢失"或者"mfc140u.dll错误"等问题时,许多用户可能会考虑直接从互联网上下载该DLL文件来快速解决问题。确实,此类错误信息经常在尝试运行某些软件,特别是依赖于 Microsoft Visual C Redistrib…

论文阅读——Deformable ConvNets v2

论文:https://arxiv.org/pdf/1811.11168.pdf 代码:https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介绍 可变形卷积能够很好地学习到发生形变的物体,但是论文观察到当尽管比普通卷积网络能够更适应物体形变&#xff…

『亚马逊云科技产品测评』活动征文|AWS云服务器EC2实例实现ByConity快速部署

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 前言 亚马逊是全球最大的在线零售商和云计算服务提供商。AWS云服务器在…

组合总和II(回溯、去重)

40. 组合总和 II - 力扣(LeetCode) 题目描述 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a…

手把手将Visual Studio Code变成Python开发神器

Visual Studio Code 是一款功能强大、可扩展且轻量级的代码编辑器,经过多年的发展,已经成为 Python 社区的首选代码编辑器之一 下面我们将学习如何安装 Visual Studio Code 并将其设置为 Python 开发工具,以及如何使用 VS Code 提高编程工作…

[Harmonyos]鸿蒙操作系统架构

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

springboot084基于springboot的论坛网站

springboot084基于springboot的论坛网站 成品项目已经更新!同学们可以打开链接查看!需要定做的及时联系我!专业团队定做!全程包售后! 2000套项目视频链接:https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR…

扫描器的使用

漏扫器 注意事项 扫描器会给客户的业务造成影响。比如,如果存在sql注入漏洞(重大的漏洞)的话,会给客户的数据库插入脏数据,后果很严重 主机漏扫 针对IP地址和网段的漏洞扫描,例如:22端口弱口…

【项目问题解决】IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder()

目录 lombok找不到符号问题修改 1.问题描述2.问题原因3.解决思路4.解决方案5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 IDEA2020.3 使用 lombok 插件 java: 找不到符号 符号: 方法 builder(),无法使用lombok下应有的注解,一度怀疑是版本问题 …