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.jarjsoup-...
这个库的设计灵感来源于jQuery,因此,如果你熟悉jQuery的语法,使用jsoup会感到特别亲切。 **1. HTML解析** jsoup的核心功能是解析HTML文档。它可以将HTML源代码转换为一个复杂的Document对象,这个对象代表了...
**Jsoup API 深入解析** Jsoup 是一个用于处理和解析HTML的Java库,它提供了强大的功能,使得在Java程序中操作HTML文档变得简单而直观。在Jsoup 1.10.2版本中,这个API进一步优化了对HTML的处理能力,提供了丰富的...
**JSoup:Java的网页抓取与解析库** JSoup是一个用Java编写的开源库,专为处理HTML文档而设计。它提供了丰富的API,使得开发者能够轻松地抓取、解析和操作网页内容。JSoup的核心功能包括从网络或本地文件系统获取...
当你需要从网页抓取数据时,Jsoup 提供了方便的 `Jsoup.connect(String url)` 方法来从给定的 URL 加载 HTML 内容。这将返回一个 Connection 对象,你可以设置请求头、超时等配置,然后调用 `get()` 或 `execute()` ...
1. **数据抓取**:从网页中抽取特定信息,如新闻标题、评论、价格等。 2. **网站自动化**:自动填写表单、点击按钮,实现自动化测试或爬虫。 3. **内容过滤**:清除HTML中的恶意脚本、广告等,提高内容安全性。 4. *...
**jsoup简介** jsoup是一款强大的Java库,用于处理和解析HTML文档。它设计的目标是使得在Java中处理HTML变得更加简单和直观。jsoup能够理解现代复杂网页的结构,并提供了丰富的API来帮助开发者提取和操作数据。这款...
赠送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 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据...jsoup是基于MIT协议发布的,可放心使用于商业项目。
在本教程中,我们将重点讨论如何使用JSoup从网络上抓取并下载图片。 **步骤一:设置依赖** 在开始之前,确保你的项目已经添加了JSoup库的依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml ...
Jsoup一款Java版数据挖掘工具,该资源包提供一键下载网络资源到本地 只需一个url 可携带cookie 携带自定义请求头 模拟用户操作
尽管【压缩包子文件的文件名称列表】中的"a28554e6ba0447269e24d1534666477d"没有明确的含义,但通常情况下,这可能是下载或存储文件时生成的唯一标识符。在实际使用中,开发者会将这个jar文件加入到项目类路径中,...
Jsoup能够解析HTML字符串或者从URL直接下载HTML内容,然后通过CSS选择器来提取数据,实现网页信息的抓取。 2. **核心功能**: - **HTML解析**:Jsoup支持HTML5标准,能准确解析各种复杂的HTML结构,包括不规范的...
这两个库在Java开发中都有着广泛的应用,例如,IText常用于报表生成、文档自动化处理,而Jsoup则常见于网页抓取、数据解析以及网页内容的提取。将它们引入项目,可以极大地提高处理文本和文档的效率。在Java环境中,...
**jsoup库详解** jsoup是一款强大的Java库,专门用于解析HTML文档,它不仅能够解析HTML,还能方便地提取和操作HTML中的数据。这个库的设计灵感来源于jQuery,因此,对于熟悉jQuery语法的开发者来说,使用jsoup会...
1. `jsoup.jar`:Jsoup的主要库文件,包含了所有的类和方法,导入此文件即可在项目中使用Jsoup。 2. `README.md`或`README.txt`:文件说明,介绍如何使用Jsoup以及可能的注意事项。 3. `LICENSE`:Jsoup的许可协议,...
- **内容提取**:无论是Jsoup还是XPath,都可以帮助开发者从HTML或XML文档中提取特定内容,用于新闻聚合、分析等场景。 总的来说,Jsoup和XPath都是Java中处理HTML和XML的强大工具,它们各有优势,选择哪一个取决于...
- **信息提取**:开发者可以利用JSoup从网页中抽取结构化信息,如联系信息、文章摘要等。 - **自动化测试**:在自动化测试场景中,JSoup可以帮助检查网页元素的存在或状态,确保页面渲染正确。 - **内容过滤与清洗**...
以下是对JSOUP的一些关键知识点的详细说明: 1. **解析HTML文档**: - `Jsoup.parse(String html)`:这个方法用于从给定的HTML字符串中创建一个`Document`对象。JSOUP的解析器会尽可能地修复不完整的HTML结构,...