使用jerry分析音悦台悦单视频下载地址并准确命名,jerry,音悦台的悦单视频,网站提
分享于 点击 14311 次 点评:159
使用jerry分析音悦台悦单视频下载地址并准确命名,jerry,音悦台的悦单视频,网站提
音悦台的悦单视频,网站提供的下载是登录用户使用网站积分下载,如果需要下载很多歌悦单,那积分肯定不够使用。
简单查看了悦单播放页面的源代码,发现整个悦单的所有视频下载地址其实就是写在页面里的。正好这几天看Jodd,就趁便用其子组件jerry写一个解析悦单视频下载的方法。
简单描述下载流程:
1,使用jerry解析页面视频下载地址,保存到本地的一个html文件为a标签href连接;
2,手动打开保存的html文件,使用迅雷下载全部连接;
3,第2步下载得到的视频文件名称并非准确的视频名称,而是一些字符串,再解析第1步的文件以得到对应视频文件名称,对第2步得到的视频文件进行重命名。
import jodd.io.FileUtil;import jodd.io.NetUtil;import jodd.lagarto.dom.jerry.Jerry;import jodd.lagarto.dom.jerry.JerryFunction;import jodd.util.SystemUtil;import java.io.File;import java.io.IOException;/** * 用于解析音乐台http://www.yinyuetai.com/悦单视频地址. */public class JerryYinyuetai { /** * 悦单视频播放地址. */ public static String pageUrl = "http://www.yinyuetai.com/playlist/354927"; /** * 视频下载地址连接串. */ public static StringBuilder hrefSb = new StringBuilder(); /** * 提取的视频下载地址及名称写入html文件. */ public static String genHtml = "F:/音悦台/音乐台视频下载.html"; public static void main(String[] args) throws IOException { File file = new File(SystemUtil.getTempDir(), "yinyuetai.html"); NetUtil.downloadFile(pageUrl, file); Jerry doc = Jerry.jerry(FileUtil.readString(file)); // System.out.println("视频个数=" + doc.$("#mvlist li").length()); doc.$("#mvlist li").each(new JerryFunction() { public boolean onNode(Jerry jerry, int i) { String url = jerry.$("span[name=videoUrl]").html(); hrefSb.append("<br/><a href=\\"" + url.substring(0, url.indexOf("?sc=")) + "\\">" + jerry.$("span strong").html() + "</a>\\n"); return true; } }); // 将提取的视频地址写入html. FileUtil.writeBytes(genHtml, hrefSb.toString().getBytes()); }}import jodd.io.FileUtil;import jodd.lagarto.dom.jerry.Jerry;import jodd.lagarto.dom.jerry.JerryFunction;import java.io.File;import java.io.IOException;import java.util.HashMap;import java.util.Map;/** * 用于对音乐台http://www.yinyuetai.com/下载的视频进行重命名. */public class JerryYinyuetaiRenameFile { /** * 视频存储地址. */ public static String downloadDir = "F:/音悦台/雅尼 - 命运的神力,让我重拾本真/"; /** * 视频编码字符名称对应文字名称map. */ public static Map<String, String> map = new HashMap<String, String>(); public static void main(String[] args) throws IOException { // 解析提取视频地址html Jerry doc = Jerry.jerry(FileUtil.readString(new File(JerryYinyuetai.genHtml))); doc.$("a").each(new JerryFunction() { public boolean onNode(Jerry jerry, int i) { String url = jerry.attr("href"); url = url.substring(url.lastIndexOf("/") + 1); String name = jerry.html(); // 替换<为<,替换>为> name = name.replaceAll("<", "<").replaceAll(">", ">"); // 替换掉斜杠/ name = name.replaceAll("/", ""); // 替换<为《,替换>为》 name = name.replaceAll("<", "《").replaceAll(">", "》"); map.put(url, name + ".flv"); return true; } }); File[] files = new File(downloadDir).listFiles(); for (File file : files) { if (map.get(file.getName()) != null) { file.renameTo(new File(downloadDir + map.get(file.getName()))); } } }}//该片段来自于http://byrx.net
用户点评