- 浏览: 927349 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
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 8265制作调查表或企业内部系统的时候,经常被一系列表单弄得焦头烂 ... -
高性能高可用的服务端研究之Req-Rep模式(附源码)
2014-03-04 10:01 5559最近在思考高可用的 ... -
也说企业应用中的公式管理功能
2011-02-14 13:41 1331在我们日常开发企业应用或互联网应用中,往往会碰到公式的高级定义 ... -
大学时光的陈年旧作:代码收集软件
2009-08-26 13:37 2057记得读大学的时候,经常喜欢收集代码,今天翻看电脑,发现大学时做 ... -
好用的复选树源码改进版
2009-07-02 15:36 3374在我们项目开发过程中,复选树是经常用碰到的,在Ext,JQ等框 ... -
Apache 2.2.x+Tomcat6集群配置备忘
2009-07-01 10:35 2939在我们部署Web应用时,不可避免大多都会涉及到集群问题,此文作 ... -
校内应用API开发源码
2009-06-24 13:04 3494目前在51,校内,facebook开发小应用越来越热,这里我仅 ... -
网页划词自动翻译的实现
2009-06-15 13:01 1314其中机器翻译调用的Google API,将以下代码另存为即可看 ... -
灰色模型预测算法源码
2008-12-09 08:50 2470在我们进行Web项目开发时,经常需要预测一些离散的数据,那么灰 ... -
AS 3.0语言的魅力(12月1日更新例子)
2008-11-28 09:11 1658以前一直用Java,由于某些Web场景的开发不得不用到Flas ... -
通用各类文档读写的设计与实现
2008-11-21 15:25 1504在我们日常的项目开发中,经常碰到需要读取word等文档的需求, ... -
Web上传文件在线压缩的实现
2008-10-16 08:23 2529在我们开发网站的过程中,如果用户上传的文件过大,由于考虑到服务 ... -
在Java调用VB编写的Dll文件
2008-10-15 08:56 5762在公司里,不同的系统使用不能的语言非常正常,我曾经在一个公司就 ... -
图论—深度优先和广度优先算法源码
2008-10-06 13:21 1887最近由于项目需要,需要实现深度优先和广度优先算法,图论中的基础 ... -
即时通信XMPP协议示例程序(可与QQ,MSN等互通)
2008-09-26 11:24 9165运行环境:JDK1.4+ 第三方包:Smack(Openfir ... -
使用Substance制作漂亮的swing皮肤(附源码)
2008-09-25 09:29 6561最近项目用swing开发桌面程序,感觉本身的swing界面实在 ... -
简易基于Ext留言板源码
2008-09-19 13:15 2707以前接私活的时候给医院做个网站,搞了个基于Ext的小论坛,但后 ... -
Java加密算法汇总
2008-09-19 09:46 1715Base64: package com.cxlh.mm; p ... -
网站全文检索的实现(基于lucene 2.0)
2008-09-18 13:46 2090辛辛苦苦做好了一个网站,接下来就必须为用户提供全文检索的功能, ... -
Google API代码
2008-09-18 08:57 1595<html> <head> ...
相关推荐
1.该源码是我公司软件工程师根据网络一些开源码,结合公司要求开发的新网站,其版权应该属于我公司和网络上开源码提供者,源码完全完全免费。 2.在IE6,IE7,IE8,firefox上都测试过,能够正常显示,网站设置栏目...
比如你从百度进入网站后,百度会自动显示在第一个位置,如果此时谷歌又有用户进入本站则谷歌显示第一,而百度会自动下滑到第二的位置,以此类推,首页只限量展示top30;3、网站演示地址是:...
比如你从百度进入网站后,百度会自动显示在第一个位置,如果此时谷歌又有用户进入本站则谷歌显示第一,而百度会自动下滑到第二的位置,以此类推,首页只限量展示top30; 3、网站演示地址是:...
该源码是我公司软件工程师根据网络一些开源码,结合公司要求开发的新网站,被应用于我公司自己的网站上,网站完全免费,并且我们在 IE6,IE7,IE8,firefox上都测试过,能够正常显示,网站设置栏目可以根据自己的要求...
【百度知道小偷程序 v1.0 测试版】是一个基于ASP编程语言开发的应用程序,其主要功能是抓取和展示百度知道平台上的问答数据。该程序可能被用于数据分析、知识整理或者网站内容填充,但请注意,未经许可的爬虫行为...
本程序采用最新的topapi 2.0编写的。 1.网站首页可通过后台管理自动更新,使首页不再静止不变,从而加快百度快照的更新和提高百度页面的收录。 2.支持API商品数据缓存,全面提高网页访问速度,更重要的是减少API...
搜索引擎名次查询.net版下载 源码<!-- 查询关键字排名(共享版) 程序说明: 此程序为ASP调用.net,你的空间必须支持asp.net否则你只有使用另一组文件 bin目录必须放在网站的根目录,此文件可以直接使用,如果你的...
本项目是关于使用Python实现百度热榜的爬取,这将帮助我们了解如何利用Python进行网页抓取,并处理实时更新的数据。在这个过程中,我们将涉及到网络请求、HTML解析以及数据存储等多个环节。 首先,我们需要引入必要...
SKYCC营销软件系列SEO查询工具能实现网页综合分析:分析网页的关键字密度、Top10关键字的百度搜索暖度指数、Header内容、Meta信息、模仿蜘蛛抓取网页内容、网页源码,搜索引擎收录查询。 •关键字排名:查询您的网站...
本文旨在分享如何使用Python编程语言抓取百度热榜中的热门话题及其链接。百度作为中国最大的搜索引擎之一,其热榜反映了当前互联网上的热点话题。对于数据分析、趋势研究等领域来说,能够自动获取这些数据非常有价值...
2. **头部文件Top.htm**:这是网页的头部部分,通常包含HTML的标签内的元素,如页面标题、CSS样式表链接、JavaScript引用以及元数据等。头部文件对于整个网站的布局和风格至关重要,因为它决定了页面的基本样式和...
域名缩短工具能够将较长的URL地址转换为较短的形式,便于分享和传播。常见的域名缩短工具有: - **谷歌缩短**:`http://goo.gl/` - **淘宝客缩短**:`http://www.taourl.com/` - **QQ推广缩短**:`http://url.cn/` -...