`
you_java
  • 浏览: 96515 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jsoup从巨鲸批量下载迈克杰克逊的MP3歌曲

    博客分类:
  • java
阅读更多

jsoup下载地址 http://www.jsoup.org

 

package jsoup;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Top100Mp3Downloader {
	
	private static final String MJ_INDEX = "http://www.top100.cn/artist/songs.php?singerid=1669";
	// http://www.top100.cn/artist/info-agr5dcqe.shtml
	// http://www.top100.cn/artist/songs.php?singerid=1669
	
	private static final String DOWNLOAD = "http://www.top100.cn/download/download.php?Productid=";
	
	/**
	 * 给定歌曲列表页面,返回歌曲名称和加密id的键值对
	 * 
	 * @param url
	 *            歌曲列表地址,如:http://www.top100.cn/artist/info-agr5dcqe.shtml
	 * @return 键值对
	 */
	private Map<String, String> findIds(String url) {
		try {
			URL u = new URL(url);
			Document doc = Jsoup.parse(u, 1000 * 10);
			Element listDiv = doc.getElementById("songsListDiv");
			Elements uls = listDiv.getElementsByTag("ul");
			Map<String, String> map = new HashMap<String, String>();
			for (int i = 0; i < uls.size(); i++) {
				Element ul = uls.get(i);
				Element hidden = ul.getElementById("hidValue");
				String id = hidden.val();
				Element li = ul.getElementsByAttributeValue("class", "No2")
						.first();
				Element href = li.getElementsByTag("a").first();
				String name = href.attr("title");

				map.put(name, id);
			}
			return map;
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 从歌曲的加密id获取歌曲的下载页面,并分析得到下载地址
	 * 
	 * @param id
	 *            加密id
	 * @return 歌曲下载页面地址
	 */
	private String findDownPathById(String id) {
		if (id.startsWith("m")) {// 所有id都是m开头
			id = id.substring(1);
		}
		String path = "http://www.top100.cn";
		URL url = null;
		try {
			url = new URL(DOWNLOAD + id);
			Document doc = Jsoup.parse(url, 1000 * 2);
			Elements lis = doc.select(".Listen_downloadtopcon ul li");
			path += lis.get(5).getElementsByTag("a").first().attr("href");
//			for (int i = 0; i < lis.size(); i++) {
//				Element e = lis.get(i);
//				if (e.tagName().equals("a")) {
//					path = e.attr("href");
//					break;
//				}
//			}
		} catch (MalformedURLException e) {
			System.out.println("访问url【" + url + "】出错!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("文件下载错误");
			e.printStackTrace();
		}
		return path;
	}

	/**
	 * 从获取的下载地址获取歌曲内容
	 * 
	 * @param dir
	 *            保存到目录
	 * @param name
	 *            歌曲名称
	 * @param path
	 *            歌曲下载地址
	 */
	private void downByPath(String dir, String name, String path) {
		System.out.println("path=" + path);
		File parent = new File(dir);
		if (!parent.exists()) {
			parent.mkdirs();
		}
		File mp3 = new File(parent, name + ".mp3");
		try {
			URL url = new URL(path);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			// 此处必须伪造referer,否则会自动返回首页.分析后,与cookie无关
			con.setRequestProperty("User-Agent",
							"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon;)");
			con.setRequestProperty("Accept-Encoding", "gzip");
			con.setRequestProperty("referer", "http://www.top100.cn");
			con.setDoInput(true);
			con.connect();
			if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
				InputStream is = con.getInputStream();
				byte[] b = new byte[1024 * 5];
				int length = -1;
				OutputStream os = new FileOutputStream(mp3);
				while ((length = is.read(b)) != -1) {
					os.write(b, 0, length);
				}
				os.flush();
				os.close();
				is.close();
			} else {
				System.out.println("服务器返回:" + con.getResponseCode());
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		Top100Mp3Downloader m = new Top100Mp3Downloader();
		for (Map.Entry<String, String> e : m.findIds(MJ_INDEX).entrySet()) {
			String name = e.getKey();
			String path = m.findDownPathById(e.getValue());
			m.downByPath("E:\\music\\files\\Michael Jackson1", name, path);
			System.out.println(name + " from " + path + " has down!");
		}
	}
}
 
分享到:
评论

相关推荐

    jsoup-1.15.3.jar

    jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jarjsoup-...

    jsoup常用包下载

    这个库的设计灵感来源于jQuery,因此,如果你熟悉jQuery的语法,使用jsoup会感到特别亲切。 **1. HTML解析** jsoup的核心功能是解析HTML文档。它可以将HTML源代码转换为一个复杂的Document对象,这个对象代表了...

    JsoupAPI(jsoup帮助文档)

    **Jsoup API 深入解析** Jsoup 是一个用于处理和解析HTML的Java库,它提供了强大的功能,使得在Java程序中操作HTML文档变得简单而直观。在Jsoup 1.10.2版本中,这个API进一步优化了对HTML的处理能力,提供了丰富的...

    jsoup-jar包

    **JSoup:Java的网页抓取与解析库** JSoup是一个用Java编写的开源库,专为处理HTML文档而设计。它提供了丰富的API,使得开发者能够轻松地抓取、解析和操作网页内容。JSoup的核心功能包括从网络或本地文件系统获取...

    jsoup中文帮助文档

    当你需要从网页抓取数据时,Jsoup 提供了方便的 `Jsoup.connect(String url)` 方法来从给定的 URL 加载 HTML 内容。这将返回一个 Connection 对象,你可以设置请求头、超时等配置,然后调用 `get()` 或 `execute()` ...

    2010最新解析html开源项目jsoup源码及api下载及jsoup.jar

    1. **数据抓取**:从网页中抽取特定信息,如新闻标题、评论、价格等。 2. **网站自动化**:自动填写表单、点击按钮,实现自动化测试或爬虫。 3. **内容过滤**:清除HTML中的恶意脚本、广告等,提高内容安全性。 4. *...

    jsoup 1.10.2 和 1.8.1包下载

    **jsoup简介** jsoup是一款强大的Java库,用于处理和解析HTML文档。它设计的目标是使得在Java中处理HTML变得更加简单和直观。jsoup能够理解现代复杂网页的结构,并提供了丰富的API来帮助开发者提取和操作数据。这款...

    jsoup-1.14.3-API文档-中文版.zip

    赠送jar包:jsoup-1.14.3.jar; 赠送原API文档:jsoup-1.14.3-javadoc.jar; 赠送源代码:jsoup-1.14.3-sources.jar; 赠送Maven依赖信息文件:jsoup-1.14.3.pom; 包含翻译后的API文档:jsoup-1.14.3-javadoc-API...

    jsoup-1.8.8.jar 包下载

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据...jsoup是基于MIT协议发布的,可放心使用于商业项目。

    jsoup从网络上抓取图片

    在本教程中,我们将重点讨论如何使用JSoup从网络上抓取并下载图片。 **步骤一:设置依赖** 在开始之前,确保你的项目已经添加了JSoup库的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml ...

    jsoup写下载.txt

    Jsoup一款Java版数据挖掘工具,该资源包提供一键下载网络资源到本地 只需一个url 可携带cookie 携带自定义请求头 模拟用户操作

    jsoup-1.8.1.jar

    尽管【压缩包子文件的文件名称列表】中的"a28554e6ba0447269e24d1534666477d"没有明确的含义,但通常情况下,这可能是下载或存储文件时生成的唯一标识符。在实际使用中,开发者会将这个jar文件加入到项目类路径中,...

    Jsoup工具jar包

    Jsoup能够解析HTML字符串或者从URL直接下载HTML内容,然后通过CSS选择器来提取数据,实现网页信息的抓取。 2. **核心功能**: - **HTML解析**:Jsoup支持HTML5标准,能准确解析各种复杂的HTML结构,包括不规范的...

    IText、Jsoup jar包

    这两个库在Java开发中都有着广泛的应用,例如,IText常用于报表生成、文档自动化处理,而Jsoup则常见于网页抓取、数据解析以及网页内容的提取。将它们引入项目,可以极大地提高处理文本和文档的效率。在Java环境中,...

    jsoup-1.11.2.jar.zip

    **jsoup库详解** jsoup是一款强大的Java库,专门用于解析HTML文档,它不仅能够解析HTML,还能方便地提取和操作HTML中的数据。这个库的设计灵感来源于jQuery,因此,对于熟悉jQuery语法的开发者来说,使用jsoup会...

    Jsoup库文件;Jsoup解析Java包

    1. `jsoup.jar`:Jsoup的主要库文件,包含了所有的类和方法,导入此文件即可在项目中使用Jsoup。 2. `README.md`或`README.txt`:文件说明,介绍如何使用Jsoup以及可能的注意事项。 3. `LICENSE`:Jsoup的许可协议,...

    Jsoup和Xpath jar包.rar

    - **内容提取**:无论是Jsoup还是XPath,都可以帮助开发者从HTML或XML文档中提取特定内容,用于新闻聚合、分析等场景。 总的来说,Jsoup和XPath都是Java中处理HTML和XML的强大工具,它们各有优势,选择哪一个取决于...

    jsoup网页内容分析

    - **信息提取**:开发者可以利用JSoup从网页中抽取结构化信息,如联系信息、文章摘要等。 - **自动化测试**:在自动化测试场景中,JSoup可以帮助检查网页元素的存在或状态,确保页面渲染正确。 - **内容过滤与清洗**...

    JSOUP的中文文档

    以下是对JSOUP的一些关键知识点的详细说明: 1. **解析HTML文档**: - `Jsoup.parse(String html)`:这个方法用于从给定的HTML字符串中创建一个`Document`对象。JSOUP的解析器会尽可能地修复不完整的HTML结构,...

Global site tag (gtag.js) - Google Analytics