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

news2024/11/24 17:46:14

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

  • 确定音乐网站的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").text
        print(title)
        singer = driver_edge.find_element(By.XPATH, "//div[@class='info_singer']/a").text
        print(singer)
        zuoci = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[1]/span").text
        print(zuoci)
        zuoqu = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[2]/span").text
        print(zuoqu)
        album = driver_edge.find_element(By.XPATH, "//div[@class='info_about']/p[3]/span/a").text
        print(album)

保存信息

# 将歌曲的信息写入到数据库中
        print("将歌曲的信息写入到数据库中!")
        number = 0
        insert_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").text
        print(title)
        singer = driver_edge.find_element(By.XPATH, "//div[@class='info_singer']/a").text
        print(singer)
        zuoci = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[1]/span").text
        print(zuoci)
        zuoqu = driver_edge.find_element(By.XPATH,"//div[@class='info_about']/p[2]/span").text
        print(zuoqu)
        album = driver_edge.find_element(By.XPATH, "//div[@class='info_about']/p[3]/span/a").text
        print(album)
        # 将歌曲的信息写入到数据库中
        print("将歌曲的信息写入到数据库中!")
        number = 0
        insert_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.coloradmin.cn/o/1292616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈https

1.网络传输的安全性 http 协议:不安全,未加密https 协议:安全,对请求报文和响应报文做加密 2.对称加密与非对称加密 2.1 对称加密 特点: 加解密使用 相同 秘钥 高效,适用于大量数据的加密场景 算法公开&a…

C++——内部类

class A { public:class B//内部类{private:int _b;}; private:int _a; }; int main() {cout << sizeof(A) << endl;return 0; } 概念及特征&#xff1a; 如果一个类定义在另一个类的内部&#xff0c;这个类就叫内部类。注意此时这个内部类是一个独立的类&#x…

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…

UEFI下Windows10和Ubuntu22.04双系统安装图解

目录 简介制作U盘启动盘并从U盘启动电脑安装系统安装Windows系统安装Ubuntu 附录双系统时间不一致 简介 传统 Legacy BIOS主板下的操作系统安装可参考本人博客 U盘系统盘制作与系统安装&#xff08;详细图解&#xff09; &#xff0c;本文介绍UEFI主板下的双系统安装&#xff…

JavaSE语法之五:数组的定义与使用(超详解!!!)

文章目录 一、数组的概念1. 什么是数组2. 数组的创建及初始化3. 数组的使用3.1 数组中元素的访问3.2 遍历数组 二、数组是引用类型1. 初始JVM的内存分布2. 基本类型变量与引用变量的区别3. 引用变量4. 认识null 三、数组的应用场景1. 保存数据2. 作为函数的参数2.1 参数传基本类…

【从零认识ECS云服务器 | 快速上线个人网站】阿里云手动搭建WordPress网站

第一步&#xff1a;部署 LAMP/LNMP 环境&#xff0c;需要在ECS实例中安装操作系统&#xff08;Linux&#xff0c;本例中使用的操作系统版本为CentOS 7.9 64位&#xff09;、Web服务器软件&#xff08;Apache/Nginx&#xff09;、数据库软件&#xff08;MySQL&#xff09;、网站…

Linux(16):认识系统服务(daemons)

什么是 daemon 与系统服务 【服务】一般的说明是【常驻在记体体中的程序&#xff0c;且可以提供一些系统或网络功能&#xff0c;那就是服务】。而服务一般的英文说法是【service】。 简单的说&#xff0c;系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面)&…

Makefile语法

一、Makefile规则格式 Makefile 里面是由一系列的规则组成的&#xff0c;这些规则格式如下&#xff1a; 目标…... : 依赖文件集合…… 命令 1 命令 2 ……参考上一节gcc编译器与Makefile入门参考这条规则 1 main: main.o input.o calcu.o2 gcc -o main main.o input.o c…

Windows 基于 VMware 虚拟机安装银河麒麟高级服务器操作系统

前言 抱着学习的态度研究一下麒麟系统的安装 银河麒麟&#xff08;KylinOS&#xff09;原是在“863计划”和国家核高基科技重大专项支持下&#xff0c;国防科技大学研发的操作系统&#xff0c;后由国防科技大学将品牌授权给天津麒麟&#xff0c;后者在2019年与中标软件合并为…

【Java基础篇 | 面向对象】—— 聊聊什么是接口(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 关于接口的简单的介绍…

七、Linux服务器集群搭建

详见《Linux服务器集群搭建》 【往期回顾】 一、Linux系统概述和安装 二、Linux基础命令 三、Linux高级命令 四、虚拟机网络配置 五、Linux基础软件安装 六、shell编程

Tomcat的初步学习

Tomcat ~~ 一个 HTTP 服务器 HTTP协议就是HTTP客户端和HTTP服务器之间通信使用的协议, HTTP客户端就是浏览器(当然也有别的). HTTP服务器,则有很多种实现. tomcat 是 Java 圈子中, 最知名, 最广泛使用的 HTTP 服务器 Tomcat的下载安装 官网链接 Apache (阿帕奇)最早也是个开源…

【Python】 Python web开发库大全

库排序是按照使用人数和文档的活跃度为参考进行的&#xff0c;建议大家使用排名靠前的框架&#xff0c;因为它们的文档更齐全&#xff0c;技术积累要更多&#xff0c;社区更繁盛&#xff0c;能得到更好的支持&#xff0c;这样在遇到自己无法解决的问题&#xff0c;可以更快更高…

收藏!当今最流行的10 种人工智能算法

人工智能的概念始于1956年的达特茅斯会议&#xff0c;由于受到数据、计算力、智能算法等多方面因素的影响&#xff0c;人工智能技术和应用发展经历了多次高潮和低谷。 2022年以来&#xff0c;以ChatGPT为代表的大模型一夜爆火&#xff0c;它能够基于在预训练阶段所见的模式和统…

Unity UGUI TextMeshPro实现输入中文和表情包(Emoji)表情

目录 实现中文显示 准备工作 1、打开Window——TextMeshPro——FontAssetCreator 2、把字体文件放入SourceFont中 3、把CharacterSet改为Characters from File 4、把字体库文件放入Characters File 5、设置好参数点击Generate Font Atlas等待完成后保存 6、把生成后保存…

代码随想录算法训练营第44天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ

JAVA代码编写 52. 携带研究材料 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&#xff0c;…

在Ascend昇腾硬件用npu加速paddleLite版本ocr(nnadapter)

在Ascend昇腾硬件用npu加速paddleLite版本ocr&#xff08;nnadapter&#xff09; 参考文档* nnadapter参考文档地址* 华为昇腾 NPU参考文档地址* PaddleLite的CAPI参考文档 一.确保cpu版本运行正常二.编译Ascend上npu加速库三.跑通npu加速版本Demo1.Demo下载地址2.参考手册网址…

Python 作业答疑

1. 哥德巴赫猜想 问题描述&#xff1a; 2000以内的不小于4的正偶数都能够分解为两个素数之和&#xff08;即验证歌德巴赫猜想对2000以内的正偶数成立&#xff09;。 问题分析&#xff1a; 根据问题描述&#xff0c;为了验证歌德巴赫猜想对2000以内的正偶数都是成立的&#…

html+css+js 三亚旅游网页设计与制作实例(6个页面)

一、作品介绍 HTMLCSSJS网页设计与制作&#xff0c;三亚旅游网页设计与制作实例&#xff0c; 本实例适合于初学HTMLCSSJS的同学。该案例里面有divcss的样式布局设置&#xff0c;这个实例比较全面&#xff0c;有一级页、二级页、详情页、输入表单等&#xff0c;共6个页面。本文…

(Gemini)双子座:一系列高能力多模态模型的前世今生

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…