- 浏览: 912165 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
masuweng:
不错!!!!!
自定义表单的设计与实现 -
xhackertxl:
注意将jstock cvs下来后去掉原先的J2SE 1.6li ...
开源项目推荐 — 股票分析软件JStock -
luoyexiaozhu:
最近在学表单这一块,没有思路,能发给我一份学习一下吗86239 ...
WEB项目中自定义表单的设计与实现 -
volunteer521:
楼主,以下的引用类没有对应的jar包,麻烦共享以下,谢谢!im ...
通用数据抽取系统 -
baichixiaozi:
体验下,谢谢分享
原创简化Web开发的框架 - JSPTagEx
在我整理完在线听歌(http://ting.faqee.com/)的模块后,剩下来的工作就是如何通过程序抓取最新的Baidu好听的歌曲,抓取的工作主要包括3个属性:歌名、歌曲在线播放地址和歌词内容(符合LRC歌词格式),目前完成歌曲和歌曲地址抓取,由于百度的歌曲地址很多通过js获取,所以歌曲地址获取我这里使用搜狗音乐搜索方便些,所有的源码如下:
package com.common.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.NodeClassFilter; import org.htmlparser.filters.OrFilter; import org.htmlparser.nodes.TextNode; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; import com.common.doc.FileOperUtils; class Song{ private String name; private String url; private String lrc; public Song(String name,String url){ this.name = name; this.url = url; this.lrc = ""; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getLrc() { return lrc; } public void setLrc(String lrc) { this.lrc = lrc; } } public class BaiduMp3 { public static String visitURL(String strUrl) { URL url = null; try { url = new URL(strUrl); } catch (MalformedURLException e) { e.printStackTrace(); } URLConnection conn = null; try { conn = url.openConnection(); conn.setDoOutput(true); } catch (IOException e) { System.out.println("e:"+e.getMessage()); } OutputStreamWriter out; try { out = new OutputStreamWriter(conn.getOutputStream(), "GBK"); out.flush(); out.close(); } catch (UnsupportedEncodingException e2) { e2.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } // 接收返回信息 BufferedReader rd = null; try { rd = new BufferedReader( new InputStreamReader(conn.getInputStream())); return rd.readLine(); } catch (IOException e1) { e1.printStackTrace(); } return ""; } /** * 功能说明:访问指定的URL并检查返回结果。 * @param strUrl * @param successFlag 请求成功的标识,比如包含“_SUCCESS”字。 * @return */ public static String visitURL(String strUrl, String successFlag) { boolean rs = false; HttpURLConnection jconn = null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { URL url = new URL(strUrl); jconn = (HttpURLConnection) url.openConnection(); jconn.setDoOutput(true); jconn.setDoInput(true); jconn.connect(); InputStream in = jconn.getInputStream(); byte[] buf = new byte[4096]; int bytesRead; while ((bytesRead = in.read(buf)) != -1) { byteArrayOutputStream.write(buf, 0, bytesRead); } String strRead = new String(byteArrayOutputStream.toByteArray(),"GBK"); return strRead; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { jconn.disconnect(); try { byteArrayOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return ""; } private static boolean isTrimEmptyOrBlank(String astr) { if ((null == astr) || (astr.length() == 0) || " ".equals(astr)) { return true; } astr = astr.trim(); if ((null == astr) || (astr.length() == 0)) { return true; } return false; } private static String getFilteredContent(String htmlContent, String reg,int i) { String content = ""; int k=1; Pattern pp = Pattern.compile(reg, Pattern.DOTALL); Matcher m = pp.matcher(htmlContent); while (m.find()) { content = m.group(); if(k++==i) break; } return content; } public static List<Song> getBaiduSongs(){ List<Song> ss = new ArrayList(); String htmlContent = visitURL("http://list.mp3.baidu.com/topso/mp3topsong.html?id=1?top2","s"); String encode = "GBK"; // System.out.println("==========================================================================="); // System.out.println(htmlContent); // System.out.println("==========================================================================="); String reg = "<table width=\"100%\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"list\">(.*?)</table>"; htmlContent = getFilteredContent(htmlContent,reg,0); //FileOperUtils.writeFile("c:\\1.html", htmlContent, false); String line = "",lineurl=""; Node anode = null; TextNode textnode = null; try { Parser parser = Parser.createParser(htmlContent, encode); NodeClassFilter textFilter = new NodeClassFilter(LinkTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { textFilter }); NodeList nodeList = parser.parse(lastFilter); Node[] nodes = nodeList.toNodeArray(); for (int i = 0; i < nodes.length; i++) { anode = (Node) nodes[i]; if(anode instanceof LinkTag){ LinkTag txt = (LinkTag)anode; line = txt.getLinkText(); if(txt.getPreviousSibling()!=null){ if(txt.getPreviousSibling().toString().indexOf("(")>=0) continue; } line = txt.getLinkText(); lineurl = txt.getAttribute("href"); //System.out.println(txt.getLink()); } if (isTrimEmptyOrBlank(line)||isTrimEmptyOrBlank(lineurl)) continue; ss.add(new Song(line,getSongURL(line))); } } catch (ParserException pe) { pe.printStackTrace(); } return ss; } private static String getSongURL(String songname){ try { String ss = URLEncoder.encode(songname,"GBK"); String htmlContent = visitURL("http://so.mp3.qihoo.com/?type=0&src=s&kw="+ss,"s"); String encode = "GBK"; String reg = "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">(.*?)</table>"; htmlContent = getFilteredContent(htmlContent,reg,1); String line = "",lineurl=""; Node anode = null; TextNode textnode = null; Parser parser = Parser.createParser(htmlContent, encode); NodeClassFilter textFilter = new NodeClassFilter(LinkTag.class); OrFilter lastFilter = new OrFilter(); lastFilter.setPredicates(new NodeFilter[] { textFilter }); NodeList nodeList = parser.parse(lastFilter); Node[] nodes = nodeList.toNodeArray(); for (int i = 0; i < nodes.length; i++) { anode = (Node) nodes[i]; if(anode instanceof LinkTag){ LinkTag txt = (LinkTag)anode; line = txt.getLinkText(); lineurl = txt.getAttribute("href"); if(!isTrimEmptyOrBlank(lineurl) && lineurl.startsWith("down.html")){ String s = getFilteredContent(lineurl,"u=(.*?)\\&",0); if(!s.equals("")&&s.length()>5){ s = Utils.replace(s, "u=", ""); s = Utils.replace(s, "&", ""); s = URLDecoder.decode(s,"GBK"); return s; } } } } } catch (Exception pe) { pe.printStackTrace(); } return ""; } public static void main(String[] args) throws Exception{ List<Song> ss = getBaiduSongs(); int idx = 0; for(Song s:ss){ System.out.println((++idx)+":"+s.getName()+"->"+s.getUrl()); } // String ss = getSongURL("国家"); // System.out.println(ss); // String s = URLDecoder.decode("http%3A%2F%2Fwww.yuelin.net%2F%B9%FA%BC%D2.mp3","GBK"); // System.out.println(s); } }
评论
5 楼
我会好好的
2009-08-03
楼主 如果一首歌有多个链接 都要存入数据库
这个应该怎么处理呢?
这个应该怎么处理呢?
4 楼
kongshanxuelin
2009-07-01
dohkoos 写道
http://www.blogjava.net/funinhand/archive/2009/06/23/283820.html
这家伙转帖了你的文章,却将在线听歌的地址换了
这家伙转帖了你的文章,却将在线听歌的地址换了
鄙视一下,点进去还不是听歌的,都是小说,哎,败类中的败类!
3 楼
dohkoos
2009-06-30
http://www.blogjava.net/funinhand/archive/2009/06/23/283820.html
这家伙转帖了你的文章,却将在线听歌的地址换了
这家伙转帖了你的文章,却将在线听歌的地址换了
2 楼
yanghamming
2009-05-31
楼主顺便做个下载功能,呵呵,搜到了全部下载下来。
1 楼
kongshanxuelin
2009-05-31
程序运行结果:
1:国家->http://www.yuelin.net/国家.mp3
2:大海->http://220.179.115.78/songmp3/dahai.mp3
3:没有如果->http://gequ.yage2008.com.cn/ZRXG/RGMYN(RXQ).mp3
4:心跳->http://space.csp360.com/UMusic/5151/Chinese/%D0%C4%CC%F8.mp3
...............
引用
1:国家->http://www.yuelin.net/国家.mp3
2:大海->http://220.179.115.78/songmp3/dahai.mp3
3:没有如果->http://gequ.yage2008.com.cn/ZRXG/RGMYN(RXQ).mp3
4:心跳->http://space.csp360.com/UMusic/5151/Chinese/%D0%C4%CC%F8.mp3
...............
发表评论
-
自定义表单的设计与实现
2017-06-13 17:46 8182制作调查表或企业内部系统的时候,经常被一系列表单弄得焦头烂 ... -
高性能高可用的服务端研究之Req-Rep模式(附源码)
2014-03-04 10:01 5495最近在思考高可用的 ... -
也说企业应用中的公式管理功能
2011-02-14 13:41 1284在我们日常开发企业应用或互联网应用中,往往会碰到公式的高级定义 ... -
大学时光的陈年旧作:代码收集软件
2009-08-26 13:37 2026记得读大学的时候,经常喜欢收集代码,今天翻看电脑,发现大学时做 ... -
好用的复选树源码改进版
2009-07-02 15:36 3321在我们项目开发过程中,复选树是经常用碰到的,在Ext,JQ等框 ... -
Apache 2.2.x+Tomcat6集群配置备忘
2009-07-01 10:35 2883在我们部署Web应用时,不可避免大多都会涉及到集群问题,此文作 ... -
校内应用API开发源码
2009-06-24 13:04 3449目前在51,校内,facebook开发小应用越来越热,这里我仅 ... -
网页划词自动翻译的实现
2009-06-15 13:01 1266其中机器翻译调用的Google API,将以下代码另存为即可看 ... -
灰色模型预测算法源码
2008-12-09 08:50 2429在我们进行Web项目开发时,经常需要预测一些离散的数据,那么灰 ... -
AS 3.0语言的魅力(12月1日更新例子)
2008-11-28 09:11 1616以前一直用Java,由于某些Web场景的开发不得不用到Flas ... -
通用各类文档读写的设计与实现
2008-11-21 15:25 1473在我们日常的项目开发中,经常碰到需要读取word等文档的需求, ... -
Web上传文件在线压缩的实现
2008-10-16 08:23 2478在我们开发网站的过程中,如果用户上传的文件过大,由于考虑到服务 ... -
在Java调用VB编写的Dll文件
2008-10-15 08:56 5711在公司里,不同的系统使用不能的语言非常正常,我曾经在一个公司就 ... -
图论—深度优先和广度优先算法源码
2008-10-06 13:21 1844最近由于项目需要,需要实现深度优先和广度优先算法,图论中的基础 ... -
即时通信XMPP协议示例程序(可与QQ,MSN等互通)
2008-09-26 11:24 9079运行环境:JDK1.4+ 第三方包:Smack(Openfir ... -
使用Substance制作漂亮的swing皮肤(附源码)
2008-09-25 09:29 6330最近项目用swing开发桌面程序,感觉本身的swing界面实在 ... -
简易基于Ext留言板源码
2008-09-19 13:15 2653以前接私活的时候给医院做个网站,搞了个基于Ext的小论坛,但后 ... -
Java加密算法汇总
2008-09-19 09:46 1680Base64: package com.cxlh.mm; p ... -
网站全文检索的实现(基于lucene 2.0)
2008-09-18 13:46 2047辛辛苦苦做好了一个网站,接下来就必须为用户提供全文检索的功能, ... -
Google API代码
2008-09-18 08:57 1561<html> <head> ...
相关推荐
python 抓取百度云分享数据,百度云最新接口抓取分享链接。
php 抓取百度搜索结果脚本,php命令行下运行
抓取网页源码.txt抓取网页源码.txt抓取网页源码.txt抓取网页源码.txt抓取网页源码.txt抓取网页源码.txt抓取网页源码.txt
用户抓取百度地图的地址信息,关键字抓取,调用百度API ,安全可靠
java根据自定义json格式规则抓取新浪新闻、百度新闻、微博动态内容的网络爬虫源码 例子中的源码功能: 导入Hbase的jar包即可直接返回Put对象数据、可以返回map对象数据、支持自定义json格式抓取指定网页的内容、抓取...
资源名:抓取网站文章的ASP.NET程序源码 资源类型:程序源代码 源码说明: 文章抓取ASP.NET源码 最近在做一些资源采集的工作,比如采集新闻,flash,图片等,通过这个小例子,来详细的说明一下我采集资源的步骤: 1....
爬虫技术抓取网站数据 爬虫+百度贴吧图片抓取案例+源码demo
基于对知乎热榜话题的数据抓取、分析与可视化python源码+数据集.tar基于对知乎热榜话题的数据抓取、分析与可视化python源码+数据集.tar基于对知乎热榜话题的数据抓取、分析与可视化python源码+数据集.tar基于对知乎...
使用正则表达式和requests,抓取猫眼 TOP100 的电影信息
php页面抓取 抓取页面 抓页面 抓页面源码
利用R语言进行网络数据抓取,源码为抓取百度贴吧-复仇之矛吧的内容。内涵多线程代码
百度地图抓取软件,可将百度网页地图保存到本地
HttpClient get、post 请求,抓取网络数据,jar包以及源码
python抓取百度搜索的数据,智普推荐使用教程
python爬虫,抓取百度贴吧中的邮箱地址,如有环境安装问题请私信我
基于对知乎热榜话题的数据抓取、分析与可视化python源码+项目说明+数据集.zip基于对知乎热榜话题的数据抓取、分析与可视化python源码+项目说明+数据集.zip基于对知乎热榜话题的数据抓取、分析与可视化python源码+...
Python 抓取百度贴吧里边的图片内容
这个是一个python脚本,加入了动态代理,主要做的就是实现百度百科自动抓取
基于PHP的百度影音抓取源码.zip