- 浏览: 142655 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
jonesmillera:
Good article! Thank you for sha ...
好用的dao(spring+jpa) -
Luob.:
里面一个类都没有,有反应才怪呢
多文件上传组件SWFUpload java环境小例子 -
seaie:
谢谢博主的分享。
下载测试了下,跑起来ok,不过有3个可改进 ...
java图片压缩处理 支持gif -
angangJonny:
没法反应怎么解决的啊!
多文件上传组件SWFUpload java环境小例子 -
nookiehuihui:
点上传没反应,什么情况
多文件上传组件SWFUpload java环境小例子
在我整理完在线听歌(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); } }
发表评论
-
java web 文件文件上传
2009-12-10 12:29 12997今日学习的主要内容是——文件的上传与下载,下载我们在之前的学 ... -
中文句子相似度判断源码探讨
2009-11-04 15:59 2973在我们日常的开发中, ... -
通用各类文档读写的设计与实现
2009-11-04 15:35 1070在我们日常的项目开发中,经常碰到需要读取word等文档的需求, ... -
Apache 2.2.x+Tomcat6集群配置备忘
2009-11-04 15:28 1638在我们部署Web应用时,不可避免大多都会涉及到集群问题,此文作 ... -
多文件上传组件SWFUpload java环境小例子
2009-10-16 14:16 6592包结构如下: index.jsp upload.jsp ... -
工具类
2009-07-23 17:42 1253import java.util.HashMap; impo ... -
好用的dao(spring+jpa)
2009-07-23 09:05 2572package com.itcast.service.base ... -
spring+JPA的注解(自己使用)
2009-06-10 00:48 1576依赖注入的手工装配的两种方式注解 @Resource 一般 ... -
spring的优缺点
2009-06-08 10:06 3215它是一个开源的项目,而且目前非常活跃;它基于IoC(Inver ... -
Struts优缺点
2009-06-08 09:51 1518跟Tomcat、Turbine等诸多Apa ... -
struts1与struts2的比较
2009-06-08 09:33 988特性 Struts 1 ... -
struts2+hibernate+spring分页方法
2009-05-27 13:16 3474import java.util.List; ... -
struts2+spring2+hibernate3.1应用实例
2009-05-22 18:24 13121. 组合Hibernate 与Spring ...
相关推荐
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/` -...