[原]java正则表达式匹配网页页面数据
2011-08-23 23:38
393 查看
转载请说明出处:/article/6544165.html
最近做项目一直在和正则表达式打交道,也有一些心得,特此记录下来。用正则表达式抓取网页上需要的东西,这里用的QQ音乐里面的一些数据为例。
基本的正则表达式可以参考:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
最终的到的数据如下:
id:0
name:动感101
desc:上海FM101.7
pic:http://imgcache.qq.com/minimusic_v5/img/dt_dg_logo.jpg
url:mms://diantai.smgbb.cn/dg101
program:音乐爱联播
time:06:00—07:00
week:周六至周日
id:0
name:厦门音乐广播
desc:厦门FM90.9
pic:http://imgcache.qq.com/minimusic_v5/img/dt_xiameng_logo.jpg
url:mms://mediasrv2.iptv.xmg.com.cn/yinyue
program:古典也疯狂
time:08:00—09:00
week:周六至周日
id:0
name:深圳飞扬971
desc:珠三角 FM97.1
pic:http://imgcache.qq.com/minimusic_v5/img/dt_97_logo.jpg
url:rtspt://vod.szr.com.cn/szr_2
program:好歌送给你
time:08:00—10:00
week:周六至周日
……
最近做项目一直在和正则表达式打交道,也有一些心得,特此记录下来。用正则表达式抓取网页上需要的东西,这里用的QQ音乐里面的一些数据为例。
基本的正则表达式可以参考:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html
public class Radio { public static void main(String[] args) { String url="http://music.qq.com/miniportal/static/qqdt/dt_program.html"; AnalysisStream stream=new AnalysisStream(); String content=stream.download(url);//获取网页源码 Radio radio=new Radio(); String str=radio.g_programList(content);//用正则表达式匹配出需要的数据 str=str.replaceAll(":", ":");//将字符串中的:替换成 : str=str.replaceAll(".", ".");//将字符串中的.替换成. str=str.replaceAll(" ", "");//将字符串中 替换成空格 str=str.substring(str.indexOf("["),str.indexOf(";"));//截取字符传中的[]里面的内容 //这里得到的结果如下:
[{id:0,name:"动感101",desc:"上海FM101.7",pic:"http://imgcache.qq.com/minimusic_v5/img/dt_dg_logo.jpg",url:"mms://diantai.smgbb.cn/dg101",program:"音乐爱联播",time:"06:00—07:00",week:"周六至周日"},
{id:0,name:"厦门音乐广播",desc:"厦门FM90.9",pic:"http://imgcache.qq.com/minimusic_v5/img/dt_xiameng_logo.jpg",url:"mms://mediasrv2.iptv.xmg.com.cn/yinyue",program:"古典也疯狂",time:"08:00—09:00",week:"周六至周日"},
{id:0,name:"深圳飞扬971",desc:"珠三角 FM97.1",pic:"http://imgcache.qq.com/minimusic_v5/img/dt_97_logo.jpg",url:"rtspt://vod.szr.com.cn/szr_2",program:"好歌送给你",time:"08:00—10:00",week:"周六至周日"},
{id:0,name:"深圳飞扬971",desc:"珠三角 FM97.1",pic:"http://imgcache.qq.com/minimusic_v5/img/dt_97_logo.jpg",url:"rtspt://vod.szr.com.cn/szr_2",program:"生日最快乐",time:"07:00—08:00",week:"周一至周五"},....]
System.out.println(str); String[] info=radio.splitString(str);//将字符串转换成字符串数组,这里用json转换成JsonArray比较容易,但是找了半天没找到jar包就自己用了一个用切割字符串的方法来处理了 for(int i=0;i<info.length;i++){ if(info[i].length()>1){ String secondinfo=info[i].replaceAll("\"", "");//去掉字符串中的双引号 String[] secondinfos=splitCate(secondinfo,",");//再次切割字符串得到数组 for(int j=0;j<secondinfos.length;j++){ System.out.println(secondinfos[j]); } } } } /** * 正则表达式匹配出需要的数据 * @param content 页面源码 * @return 得到需要的数据字符串 */ private String g_programList(String content){ String info=null; Pattern pattern=Pattern.compile("var g_programList = [\\s\\S]+?];"); Matcher matcher=pattern.matcher(content); if(matcher.find()){ String content_li=matcher.group(); info=content_li; } return info; } /** * 将字符串转换成字符数组 * @param content * @return */ public String[] splitString(String content){ StringTokenizer commaToker = new StringTokenizer(content, "[{*}]"); String[] result = new String[commaToker.countTokens()]; int k = 0; while (commaToker.hasMoreTokens()) { result[k] = commaToker.nextToken(); k++; } return result; } /** * 指定的方式切割指定的字符串 * @param content 要切割的字符串 * @param split 切割方式 * @return 字符串数组 */ public static String[] splitCate(String content,String split){ StringTokenizer commaToker = new StringTokenizer(content, split); String[] result = new String[commaToker.countTokens()]; int k = 0; while (commaToker.hasMoreTokens()) { result[k] = commaToker.nextToken(); k++; } return result; } }
最终的到的数据如下:
id:0
name:动感101
desc:上海FM101.7
pic:http://imgcache.qq.com/minimusic_v5/img/dt_dg_logo.jpg
url:mms://diantai.smgbb.cn/dg101
program:音乐爱联播
time:06:00—07:00
week:周六至周日
id:0
name:厦门音乐广播
desc:厦门FM90.9
pic:http://imgcache.qq.com/minimusic_v5/img/dt_xiameng_logo.jpg
url:mms://mediasrv2.iptv.xmg.com.cn/yinyue
program:古典也疯狂
time:08:00—09:00
week:周六至周日
id:0
name:深圳飞扬971
desc:珠三角 FM97.1
pic:http://imgcache.qq.com/minimusic_v5/img/dt_97_logo.jpg
url:rtspt://vod.szr.com.cn/szr_2
program:好歌送给你
time:08:00—10:00
week:周六至周日
……
相关文章推荐
- java正则表达式匹配网页页面数据
- java利用正则表达式截取网页数据
- java正则表达式匹配网页所有网址和链接文字的示例
- java正则表达式,读取字符串不区分大小写;正则匹配表达式中的数字或者字母;正则匹配网页中的邮箱
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- java正则表达式匹配网页所有网址和链接文字的示例
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
- 黑马程序员——JAVA基础---正则表达式---概述,匹配、切割、替换、提取,网页爬虫
- java正则表达式匹配网页email(email抓取)
- java通过url抓取网页数据-----正则表达式
- JAVA中正则表达式匹配,替换,查找,切割的方法
- 利用正则表达式将html网页数据变成Web Service
- java中正则表达式-匹配问题
- Java 正则表达式匹配模式(贪婪型、勉强型、占有型)
- 详解JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- Java 正则表达式--匹配类型
- Java/Js下使用正则表达式匹配嵌套Html标签
- Java抓取网页数据(原来的页面+Javascript返回数据)
- Java 正则表达式 量词 --- 三种匹配模式【贪婪型、勉强型、占有型】