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

学习了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地址下载音乐到本地。

java爬虫爬取音乐相关推荐

  1. python java 爬数据_如何用java爬虫爬取网页上的数据

    当我们使用浏览器处理网页的时候,有时候是不需要浏览的,例如使用PhantomJS适用于无头浏览器,进行爬取网页数据操作.最近在进行java爬虫学习的小伙伴们有没有想过如何爬取js生成的网络页面吗?别急 ...

  2. Java爬虫 --- 爬取王者荣耀英雄图片

    Java爬虫 - 爬取王者荣耀英雄图片 import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Docu ...

  3. 爬虫爬取音乐url大全

    爬虫爬取音乐url大全 今天无聊,想做个公众号点播歌曲功能,所以去某网站爬了303222首音乐,音乐有效率较高,爬了8个小时还没爬完,我就不爬了. 两个方法小功能有点不一样,所以写的有的显得多余,不管 ...

  4. Java爬虫 爬取某招聘网站招聘信息

    Java爬虫 爬取某招聘网站招聘信息 一.系统介绍 二.功能展示 1.需求爬取的网站内容 2.实现流程 2.1数据采集 2.2页面解析 2.3数据存储 三.获取源码 一.系统介绍 系统主要功能:本项目 ...

  5. java爬虫爬取笔趣阁小说

    java爬虫爬取笔趣阁小说 package novelCrawler;import org.jsoup.Connection; import org.jsoup.HttpStatusException ...

  6. Java爬虫爬取wallhaven的图片

    Java爬虫爬取wallhaven的图片 参考文章:JAVA Jsoup爬取网页图片下载到本地 需要的jar包:jsuop wallhaven网站拒绝java程序访问,所以要伪装报头. 发送请求时 C ...

  7. 我的第一个开源项目:Java爬虫爬取旧版正方教务系统课程表、成绩表

    Java爬虫爬取旧版正方教务系统课程表.成绩表 一.项目展示 1.正方教务系统 首页 2.爬虫系统 首页: 成绩查询: 课表查询: 二.项目实现 1.爬取思路描述 无论是成绩查询或课表查询亦或者其它的 ...

  8. Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情

    Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情 先识别商品url,区分平台提取商品编号,再根据平台带着商品编号爬取数据. 1.导包 <!-- 爬虫相关Jar包依赖 --><d ...

  9. java爬虫爬取互联网上的各大影视网站---360影视(附源码下载)

    关于爬虫: 万维网上有着无数的网页,包含着海量的信息,无孔不入.森罗万象.但很多时候,无论出于数据分析或产品需求,我们需要从某些网站,提取出我们感兴趣.有价值的内容,但是纵然是进化到21世纪的人类,依 ...

最新文章

  1. operate函数_跟着 redux 学 compose组合函数
  2. 开源跨平台移动项目Ngui【Action动作系统】
  3. 抓取猫眼电影top100的正则、bs4、pyquery、xpath实现方法
  4. Apache的网页和安全优化
  5. 剑指offer--整数中1出现的次数
  6. Linux网络-数据包的接收流程(基于RTL8139网卡驱动程序)
  7. LintCode MySQL 1932/1933. 挂科最多的同学 I / II
  8. 2020有效的邮箱号大全_2020年公众号免费裂变涨粉的3个有效方法,让我一天涨粉6000...
  9. Javascript中暂停功能的实现
  10. 2021年中国制药机械市场趋势报告、技术动态创新及2027年市场预测
  11. python列表内元素求和_Python之list对应元素求和
  12. BMI160低功耗学习
  13. 苹果手机上怎么安装ipa文件?
  14. 一个QQ用户名/密码钓鱼分析
  15. 【C语言】从零开始的C语言小游戏之路(总)
  16. 辽宁师范大学计算机科学与技术在哪个校区,2021年辽宁师范大学有几个校区,大一新生在哪个校区...
  17. 西门子1200PLC与V90伺服驱动器 TO控制模式(即工艺对象的方式))
  18. 功能安全b等级_安全B端会议吸引了越来越多的信息安全人群
  19. 2019年安徽省大学生网络攻防赛赛前培训——Day2
  20. 优质计算机教案,信息技术优质课教案.docx

热门文章

  1. 使用Mindstudio调用Modelarts进行模型训练
  2. 换发型算法_今年烫发就选“大C卷烫发”,想换发型的女生可以做参考!
  3. 理解STP及端口角色状态
  4. Spring的事物管理及应用
  5. 利润表模板excel_超多种类的报表模板,填上数据就能用,全拿走
  6. charAt、charCodeAt、fromCharCode作用
  7. 单片机实例14——4×4矩阵式键盘识别技术(硬件电路图+汇编程序+C语言程序)
  8. lol登录服务器时显示乱码,win7系统登录LOL游戏出现乱码的解决方法
  9. 苹果提审提示缺失1024*1024苹果应用商店图标
  10. 贱贱的美团安卓客户端---如何实现让安卓app在应用列表获得较靠前的位置