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

学习了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. v-html解析的相对地址img 显示不出来_人工智能专题作品解析——APPInventor安卓应用开发AI图像识别简单应用...
  2. centos amd双显卡_讯景RX590 AMD 50周年纪念版显卡评测
  3. 浮点数c语言,C语言浮点数运算
  4. 光学模拟 Android,基于Android的光学字符识别研究与实现
  5. 最详细的R-CNN论文笔记
  6. Shiro入门视频课程——笔记(一)
  7. iOS设计模式——委托(delegate)
  8. MyBatis简单了解
  9. 使用poi解析word转html,并处理word中图片
  10. 第二课 介绍:手绘墙画颜料选择
  11. 企业经营性icp许可证与非经营性icp的区别
  12. halcon物体周边毛刺检测
  13. element el-input设置只能输入数字 而且限制最大值
  14. php-fpm的几种重启方式
  15. 小程序CMS(开通预览)
  16. 助力丽水市周安村“数字乡村”建设 ,复杂美区块链赋能农产品溯源营销
  17. tup,list,dict,set的创建
  18. 图解爬虫,用几个最简单的例子带你入门Python爬虫
  19. 咖啡再热闹,也逃不出巨头的手掌心
  20. 助理电子商务师html,助理电子商务师考试HTML相关试题汇总.doc

热门文章

  1. 鸿蒙系统VR伙伴,鸿蒙2.0系统让开发者看到了未来曙光 华为让AR/VR跨越时空,迈进现实...
  2. Taro request 请求封装
  3. PCB信仰直尺-开源
  4. 谈谈智能手机软件(2):Linux手机软件
  5. Windows XP也可以压缩磁盘和文件夹来增加磁盘空间
  6. 对勾函数_对勾函数讲解与例题解析
  7. Refused to display 'XXX' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
  8. a = a++与 a = ++a详解
  9. 面对区块链,徐小平们懂个毛线(行业观察)
  10. Centos7 处理挖矿病毒初探