java爬虫爬取音乐

以前写过一个音乐网站,我都是手动去下载音乐,并上传到网站,非常麻烦。

学习了HttpClinet和Jsoup 我决定完成一个简单的爬虫去收集音乐信息,并下载音乐;

先尝试做几个简单的小功能:

基本功能

1.根据歌曲名或歌手名爬取音乐

2.查看下载的音乐信息

3.将MP3信息下载到电脑中

4.数据库将音乐去重

 

1.根据歌曲名或歌手名爬取音乐

    @GetMapping("/{search}")public Result downloadMusic(@PathVariable("search")String search){List<Music> musicList =         musicSearchTask.searchByMusicNameOrSingerName("https://www.xzmp3.com", search);return Result.ok(musicList.size());}
     /*** * 根据mainUrl search 爬取 歌曲名 歌手 下载地址 并保存到数据库* @param mainUrl* @param search*/public List<Music> searchByMusicNameOrSingerName(String mainUrl,String search){String searchString = mainUrl+"/xiazai/"+search+".htm";log.info("下载地址:"+searchString);String html = httpUtils.doGetHtml(searchString);Document doc = Jsoup.parse(html);Elements elements = doc.select(".list.return_list>div.return_item");List<Music> musicList = new ArrayList<>();for (Element element : elements){Music m = new Music();String musicName = element.select(".single_line.item.name").text();String singerName = element.select(".single_line.item.singer").text();String DownloadUrl = element.select(".single_line.item.name").attr("href");DownloadUrl = mainUrl+DownloadUrl;m.setMusicName(musicName);m.setSingerName(singerName);m.setDownloadUrl(DownloadUrl);musicList.add(m);System.out.println(m);}boolean b = musicServerimpl.saveBatch(musicList);if(b){log.info("导入数据库成功");}else {log.error("导入失败");}return musicList;}

2.查看下载的音乐信息

@PostMapping("findAll")public Result findAll(){List<Music> list = musicServerimpl.list();return Result.ok(list);}

 3.将MP3信息下载到电脑中

public String doGetMP3(String url){if(!url.endsWith("mp3")){log.info("下载失败,不是.mp3");return "";}//httpClient对象CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(this.cm).build();//get请求HttpGet httpGet = new HttpGet(url);httpGet.setConfig(this.getConfig());CloseableHttpResponse response = null;try {response = httpClient.execute(httpGet);log.info("响应状态:"+response.getStatusLine().getStatusCode());log.info("响应信息:"+response.getEntity());if(response.getStatusLine().getStatusCode() == 200){//判断响应体if(response.getEntity() != null){String mp3Name = UUID.randomUUID().toString()+".mp3";//下载MP3OutputStream outputStream = new FileOutputStream("C:\\Users\\彭禹豪\\Desktop\\images\\"+mp3Name);response.getEntity().writeTo(outputStream);log.info("下载成功:"+mp3Name);return mp3Name;}log.info("下载失败,没有MP3信息");return "";}} catch (IOException e) {throw new RuntimeException(e);}finally {if(response!=null){try {response.close();} catch (IOException e) {throw new RuntimeException(e);}}}log.info("下载失败,下载有问题或无下载权限");return "";}

4.数据库将音乐去重

<delete id="musicDeduplication">delete from music where music_id not in (select * from (select max(music_id) from music group by music_name,singer_name)temp)</delete>

由于种种原因,我没有选择通过一个种子不断解析出url下载所有音乐信息,而是通过音乐名和歌曲名分析一个url 并解析出里面的音乐并保存到数据库。而且MP3的信息还下载地址中没有解析出来。

后续我将学习webMagic框架,通过模块的方式,进行功能的解耦,不断的分析出url,下载音乐信息。并通过异步方式分析出MP3地址下载音乐到本地。

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

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

相关文章

计算机上面的音乐,电脑上如何识别音乐

电脑上如何识别音乐 我们都知道怎么在手机上使用软件来实现识别音乐的功能&#xff0c;但是在网上怎么识别呢。那么电脑上如何识别音乐呢?下面就让jy135小编来告诉大家吧&#xff0c;欢迎阅读。 首先打开midomi网站(http://www.midomi.com/) 见下图 点击网站上的“Click and S…

python音乐爬取

思路 本次爬取音乐使用reqursts模块&#xff0c;在安装此模块的基础上爬取音乐。 首先要获取抓包链接&#xff0c;这是一串网址&#xff0c;获取方法就是当你在浏览器界面播放音乐时打开开发者界面寻取。其次使用get()向服务器发送get请求 .content获取二进制数据。最后将此写入…

Spring AOP简介及相关案例

目录 一、Spring AOP简介 二、AOP相关术语 三、AOP入门案例 1. 引入依赖 2. 编写连接点 3. 编写通知类 4. 配置切面 5. 测试 四、通知类型 1. 编写通知方法 2. 配置切面 3. 测试 五、切点表达式 六、多切面配置 1. 编写发送邮件的通知 2. 配置切面 3. 测试 …

Java与数据库:JDBC和ORM框架的使用和效率优化

第一章&#xff1a;引言 随着互联网的快速发展和大数据时代的到来&#xff0c;数据库在软件开发中起到了至关重要的作用。Java作为一门强大而广泛应用的编程语言&#xff0c;提供了多种与数据库交互的方式。其中&#xff0c;JDBC和ORM框架是最常用的两种方式。本文将深入探讨J…

适合打游戏用的蓝牙耳机有哪些?吃鸡无延迟的蓝牙耳机推荐

现在手游的兴起&#xff0c;让游戏市场变得更加火爆&#xff0c;各种可以提高玩家体验的外设也越来越多&#xff0c;除了提升操作的外置按键与手柄外&#xff0c;能带来更出色音质与舒心使用的游戏耳机&#xff0c;整体氛围感更好&#xff0c;让玩家在细节上占据优势&#xff0…

打游戏的蓝牙耳机推荐哪一款?吃鸡蓝牙游戏耳机推荐

选倒一款好的蓝牙耳机&#xff0c;即可以享受美妙音乐&#xff0c;也可以沉浸于深度游戏体验之中&#xff0c;能够让自己的身心压力得到释放。不过呢&#xff0c;最近发现很多人在买蓝牙耳机的时候都不知道怎么选一款靠谱的产品。作为已有5年多玩机经验的爱好者&#xff0c;今天…

即兴演讲、怎么锻炼即兴演讲能力、一些即兴演讲的模板

文章目录 应有素质准备方法模糊性临场性 组合形式并列式正反式递进式 基本技巧举例说明**一. 散 点 联 想 法****二. 问题--原因--解决方案****三. 感谢--回顾--愿景****四. 观 音 按 揭 法****五. 黄 金 三 点 法****六. 总 结****1. 五个名称-锻炼你的大脑快速反应能力****2.…

String字符串

文章目录 String类String常用的字符串处理方法StringBuffer类 StringBufferStringBuffer类中常用的方法StringBuilder类&#xff08;了解为主&#xff09;StringTokenzier类&#xff08;了解为主&#xff09; final属性&#xff0c;不可扩展&#xff0c;不可子类&#xff0c;不…

在idea中创建一个SpringBoot模块

方式一&#xff1a;自动创建&#xff08;需要联网&#xff09; 第一步&#xff1a;新建模块 按住ctrlshiftalts&#xff0c;打开项目结构&#xff0c;选择新建模块&#xff1b; 第二步&#xff1a;选择Spring Web &#xff08;1&#xff09;选择SpringBoot版本&#xff0c…

结构型模式的设计模式笔记

此笔记是在软件秘笈-设计模式那点事上做的笔记 一.适配器模式 1.设计思路 既有的软件结构具有稳定运行的基础&#xff0c;但是却无法直接利用到新的程序当中&#xff0c;这时就需要一个适配器&#xff0c;在原有内容和新的结果之间沟通&#xff0c;从而达到预期的效果 &#…

asp.net 面试题目

1、页面传值的方式及其优缺点?Session,Application,Cookies,Requst.QueryString,Requst.Form,Server.Transfer(通过Context.Handler接收整个页面)2、ASP.NET身份验证方式及其工作原理Windows 身份验证提供程序提供有关如何将 Windows 身份验证与 Microsoft Internet 信息服务 …

浮躁的原罪-兼答网友留言

交流的起点&#xff1a; 首先感谢所有回帖和关注的网友。因为下面主要是对异议和反对者的答复&#xff0c;这看来对支持&#xff0f;认同我的观点和心有戚戚焉的各位不公平&#xff0c;所以这里先对你们的支持表示感激。无论是对反对者还是支持者&#xff0c;随着我的观点的展…

【案例】 生成词云玩玩?

案例介绍 今天我们来生成词云&#xff0c;所谓词云&#xff0c;就是以一定的频度将大小不用的词汇显示在图片模板上。 准备工作 wordcloud&#xff08;生成词云核心&#xff09;PILnumpyjieba&#xff08;提供分词功能&#xff09;模板图片需要分析的文本 模板图片 文本内容…

python汉语意思-python汉语谐音

广告关闭 2017年12月&#xff0c;云社区对外发布&#xff0c;从最开始的技术博客到现在拥有多个社区产品。未来&#xff0c;我们一起乘风破浪&#xff0c;创造无限可能。 上面介绍beautifulsoup的特点时说到了&#xff0c;beautifulsoup支持python标准库的解析器html5lib&…

android的属性如何使用方法,Android第二大控件,EditText的属性和使用方法

原标题&#xff1a;Android第二大控件&#xff0c;EditText的属性和使用方法 EditText与TextView非常相似&#xff0c;它甚至与TextView 共用了绝大部分XML属性和方法。EditText与TextView的最大区别在于&#xff1a;EditText可以接受用户输入。 一、EditText简介 EditText支持…

android textview点击部分,Android开发第二大控件,EditText的属性和使用方法

EditText与TextView非常相似&#xff0c;它甚至与TextView 共用了绝大部分XML属性和方法。EditText与TextView的最大区别在于&#xff1a;EditText可以接受用户输入。 一、EditText简介 EditText支持的XML属性及相关方法见TextView表中介绍的与输入有关的属性和方法&#xff0c…

C# 学习笔记入门篇

文章目录 C# 学习笔记入门篇〇、写在前面Hello World!这篇学习笔记适合什么人这篇学习笔记到底想记什么附加说明 一、命名空间“进入”命名空间嵌套的命名空间、分立的命名空间习题习题答案 二、类与面向对象相关概念在 C# 中定义类静态方法&#xff0c;程序入口习题 三、变量其…

小学计算机教学管理工作总结,2020小学信息技术教师教学工作总结

弹指一挥间,我在教师的岗位上走过了一年。下面是小编准备的2020小学信息技术教师教学工作总结&#xff0c;欢迎阅读。 2020小学信息技术教师教学工作总结1 从20**年至今&#xff0c;我一向担任我校的信息技术教学工作&#xff0c;由起初不知该怎样教的“学习型”教师&#xff0…

小学计算机课教学工作总结,小学信息技术课教师工作总结3篇

小学信息技术课教师工作总结3篇 在小学信息课堂教学中&#xff0c;教师进行教学设计时要充分结合学生的心理特点和兴趣取向&#xff0c;努力为学生创造出充满趣味性的学习环境。接下来小编给大家整理了小学信息技术课教师工作总结3篇&#xff0c;仅供参考。 小学信息技术课教师…

计算机房一般的讲台,小学糗事——献给黄陂蔡店小学辛勤的园丁

文 | 程志清(蔡店|宜昌) 1959年8月30日&#xff0c;我堂而皇之地来到蔡店北庙小学(以前都是偷偷来摸菩萨的。北庙小学&#xff0c;即蔡店小学前身)。 一进大门&#xff0c;只见天井上方正厅通体浑圆的大泥菩萨下&#xff0c;摆着一张课桌。课桌旁&#xff0c;坐着梳搭毛头的中年…