批量下载baidu音乐主页的歌曲

[代码] 华语 package com;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Input http://www.fpzhuhai.com/linked/20130207.do; Stream;
import java.util.Date;import net.sf.json.JSONObject;import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;/*** 批量下载baidu音乐主页的歌曲.* @author gehouse**/
public class MusicSpider {public static final String BAI_DU_MUSIC = "http://music.baidu.com";private String saveDestinationPath;//下载保管途径public MusicSpider(String saveDestinationPath){if(!saveDestinationPath.endsWith("/")){saveDestinationPath  = "/"; }this.saveDestinationPath = saveDestinationPath;}private Document initDocument(String url) {try {Document doc = Jsoup.connect(url).header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1").header("Accept", "text ml,application/xhtml xml").header("Accept-Language", "zh-cn,zh;q=0.5").header("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7").get();return doc;} catch (IOException e) {e.printStackTrace();}return null;}/*** 取到下载连接.* @param url* @return*/private String getDownLoadLink(String url) {if(url.contains("artist")){return null;}url = BAI_DU_MUSIC   url;Document doc = initDocument(url);Element form = doc.getElementById("form");if(form == null){return null;}Elements linkLi = form.getElementsByTag("li");JSONObject json = JSONObject.fromObject(linkLi.get(0).attr("data-data"));String link = (String) json.get("link");if(link != null){link = link.substring(link.indexOf("?")   6, link.length());}return link;}/*** 下载.* @param downLoadlink* @param saveName* @param saveDestinationPath*/private void saveMusic(String downLoadlink, String saveName, String saveDestinationPath){System.out.print(saveName "---->  下载中......");Date d1 = new Date();try {HttpClient client = new HttpClient();GetMethod get = new GetMethod(downLoadlink);client.executeMethod(get);File file = new File(saveDestinationPath);if(!file.exists()){file.mkdirs();}file = new File(saveDestinationPath   saveName   ".mp3");FileOutputStream outputStream = new FileOutputStream(file);InputStream is = get.getResponseBodyAsStream();ByteArrayOutputStream swapStream = new ByteArrayOutputStream();byte[] buff = new byte[1024]; // buff用于寄存循环读取的暂时数据int rc = 0;while ((rc = is.read(buff)) > 0) {swapStream.write(buff, 0, rc);}byte[] in_b = swapStream.toByteArray();outputStream.write(in_b);outputStream.close();} catch (HttpException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}Date d2 = new Date();System.out.println("	下载耗时:" ((d2.getTime()-d1.getTime()) / 1000) "秒");}public void catchMusic(){Document doc = initDocument(BAI_DU_MUSIC);Elements songList = doc.getElementsByClass("song-list");//取到歌曲列表for(int i = 0;i < songList.size();i  ){Elements labelLi = songList.get(i).getElementsByTag("li");for(int j = 0;j < labelLi.size();j  ){Elements labelA = labelLi.get(j).getElementsByTag("a");String musicName = labelA.get(0).attr("title");File file = new File(saveDestinationPath   musicName   ".mp3");if(!file.exists()){String href = labelA.get(0).attr("href");String downLoadlink = getDownLoadLink(href   "/download?__o=/song/"href.substring(href.lastIndexOf("/")   1, href.length()));if(downLoadlink == null){continue;}saveMusic(downLoadlink, musicName, saveDestinationPath);}}}}/*** @param args*/public static void main(String[] args) {MusicSpider ms = new MusicSpider("e:/baidu_music");ms.catchMusic();}} http://www.szhaoexport.com/linked/20130207.do; 

转载于:https://www.cnblogs.com/fpqqchao/archive/2013/02/08/2909098.html

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

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

相关文章

做简单的android 软件推荐,Android_适用于Android开发的简单聊天软件,适用于android 开发。是一个简 - phpStudy...

适用于Android开发的简单聊天软件适用于android 开发。是一个简单的聊天软件&#xff0c;包括知识点&#xff0c;各个控件的运用(ExpandableListView&#xff0c;ViewPager&#xff0c;Spinner&#xff0c;LinearLayout,RelativeLayot)&#xff0c;自定义的ViaImageView(自定义…

使用自定义表类型(SQL Server 2008)

在 SQL Server 2008 中&#xff0c;用户定义表类型是指用户所定义的表示表结构定义的类型。您可以使用用户定义表类型为存储过程或函数声明表值参数&#xff0c;或者声明您要在批处理中或在存储过程或函数的主体中使用的表变量。有关如何定义表结构的详细信息&#xff0c;请参阅…

html select不能修改,更改HTML Select元素的选定选项

香草JavaScript使用普通的旧JavaScript&#xff1a;var val "Fish";var sel document.getElementById(sel);document.getElementById(btn).onclick function() {var opts sel.options;for (var opt, j 0; opt opts[j]; j) {if (opt.value val) {sel.selectedI…

用excel打开文本内容

linux中直接从数据库导出数据存为txt文本&#xff0c;用文本编辑器打开是这样的&#xff0c;不适合统计数据&#xff0c;转成excel就万事大吉了,这点事微软怎么会想不到呢直接上图&#xff1a;every thing goes well!! :-)来自为知笔记(Wiz)转载于:https://www.cnblogs.com/fir…

html框架有什么作用,使用HTML5+CSS+JS框架有那些好处

使用HTML5CSSJS框架有那些好处2017-12-08相信很多程序猿朋友都用过框架&#xff0c;不过你是否知道你用的是HTML框架、CSS框架还是JS框架&#xff0c;其实这都不重要&#xff0c;重要的是使用框架的目的是什么&#xff1f;是不是节约了开发项目时间陈本&#xff0c;这事多么伟大…

SharePoint【学习笔记】-- SharePoint 2010 技术参数整理

今天整理一些 SharePoint 2010 的技术参数&#xff0c;其内容都来自 SharePoint-Sandbox 网站。 有些参数值是硬性的&#xff0c;比如列表单条记录的尺寸&#xff1b;而有些是为了使用和性能考虑的推荐值。 技术参数值列表最大记录数500万条列表单条记录上限8KB&#xff08;不含…

目前微型计算机中常用的鼠标器有什么两类,2009年计算机一级考试真题及答案...

2009年计算机一级考试真题及答案。一、选择题1、在计算机领域中通常用M IPS来描述______。A、计算机的运算速度B、计算机的可靠性C、计算机的可运行性D、计算机的可扩充性2、微型计算机存储系统中&#xff0c;PROM是______。A、可读写存储器B、动态随机存取存储器C、只读存储器…

当某个快捷键不能用时很可能是热键冲突

解决办法&#xff1a;上次我的复制 ctrl c不能用就是打开的QQ系统设置&#xff0c;只保留qq的截图快捷键&#xff0c;其他的都是无。 哎&#xff0c;一会又热键冲突了&#xff0c;卸载了搜狗输入法就没事了&#xff0c;原来搜狗的问题。转载于:https://www.cnblogs.com/xiaofa…

用HTML写一首绝句古诗,《绝句二首》_杜甫的诗词_诗词名句网

作品赏析迟日江山丽&#xff0c;春风花草香。泥融飞燕子&#xff0c;沙暖睡鸳鸯。清代的诗论家陶虞开在《说杜》一书中指出&#xff0c;杜集中有不少“以诗为画”的作品。这一首写于成都草堂的五言绝句&#xff0c;就是极富诗情画意的佳作。诗一开始&#xff0c;就从大处着墨&a…

计算机组装与维护配置清单作业,计算机组装与维护 作业汇.doc

计算机组装与维护 作业汇计算机组装与维护学院&#xff1a;信息工程与自动化学院专业&#xff1a;测控技术与仪器级别&#xff1a;2011级姓名&#xff1a;学号&#xff1a;&#xff0e;三篇测评&#xff0c;100个名词解释一&#xff0e;电脑测评地址&#xff1a; HYPERLINK /do…

html+dom能做什么,jQuery能做什么?

jQuery是一个简洁而快速的JavaScript库&#xff0c;可用于简化事件处理&#xff0c;HTML文档遍历&#xff0c;Ajax交互和动画&#xff0c;以便快速开发网站。目的是让开发者更容易地在网站上使用JavaScript。它不是一种单独的编程语言&#xff0c;与JavaScript一起工作。使用jQ…

9个常用iptables配置实例

iptables命令可用于配置Linux的包过滤规则&#xff0c;常用于实现防火墙、NAT。咋一看iptables的配置很复杂&#xff0c;掌握规律后&#xff0c;其实用iptables完成指定任务并不难&#xff0c;下面我们通过具体实例&#xff0c;学习iptables的详细用法。 1.删除已有规则 在新设…

中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...

根据三胜产业研究中心数据&#xff0c;2017年1-6月全国微型计算机设备产量统计显示&#xff1a;2017年6月全国微型计算机设备产量为2896.88万部&#xff0c;当月同比增速18.9%&#xff1b;2017年1-6月全国微型计算机设备产量累计为14145.57万部&#xff0c;累计同比增速5%。图表…

javascript-04 引用类型

引用类型是一种数据结构&#xff0c;用于将数据和功能组织在一起&#xff0c;是一个对象 Object类型var obj new Object(); var obj {name: "xiaoming", age: 15}; 一般访问采用 alert(obj.name) Array类型数组 var arr new Array(n); n个项的数组 var arr new A…

html JSP 富文本案例,JSP页面引入Ueditor富文本编辑器!

最近做项目时&#xff0c;需要用到富文本编辑器&#xff0c;使用了百度的Ueditor编辑器&#xff0c;因此 在这和大家分享下工具/原料myeclipse,ueditor方法/步骤从官网上 地开级还思层似未屏别。域一插式近址发应是http://ueditor.baidu.com/website/download.h分浏代刚的学过互…