java利用htmlparser获取html中想要的代码
2014-02-12 10:24
330 查看
这两天需要做一些东西,需要抓取别人网页中的一些信息。最后用htmlparser来解析html。
直接从代码中看吧:
首先需要注意导入包为:import org.htmlparser下面的包
List<Mp3> mp3List = new ArrayList<Mp3>();
try{
Parser parser = new Parser(htmlStr);//初始化Parser,这里要注意导入包为org.htmlparser。这里参数有很多。这个地方我写的是提前获取好的html文本。也可以传入URl对象
parser.setEncoding("utf-8");//设置编码机
AndFilter filter =
new AndFilter(
new TagNameFilter("div"),
new HasAttributeFilter("id","songListWrapper")
);//通过filter找到div且div的id为songListWrapper
NodeList nodes = parser.parse(filter);//通过filter获取nodes
Node node = nodes.elementAt(0);
NodeList nodesChild = node.getChildren();
Node[] nodesArr = nodesChild.toNodeArray();
NodeList nodesChild2 = nodesArr[1].getChildren();
Node[] nodesArr2 = nodesChild2.toNodeArray();
Node nodeul = nodesArr2[1];
Node[] nodesli = nodeul.getChildren().toNodeArray();//解析出nodesli为想要的
for(int i=2;i<nodesli.length;i++){
//System.out.println(nodesli[i].toHtml());
Node tempNode = nodesli[i];
TagNode tagNode = new TagNode();//通过TagNode获得属性,只有将Node转换为TagNode才能获取某一个标签的属性
tagNode.setText(tempNode.toHtml());
String claStr = tagNode.getAttribute("class");//claStr为bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黄渤' } }
claStr = claStr.replaceAll(" ", "");
if(claStr.indexOf("\\?")==-1){
Pattern pattern = Pattern.compile("[\\s\\wa-z\\-]+\\{'songItem':\\{'sid':'([\\d]+)','sname':'([\\s\\S]*)','author':'([\\s\\S]*)'\\}\\}");
Matcher matcher = pattern.matcher(claStr);
if(matcher.find()){
Mp3 mp3 = new Mp3();
mp3.setSid(matcher.group(1));
mp3.setSname(matcher.group(2));
mp3.setAuthor(matcher.group(3));
mp3List.add(mp3);
//for(int j=1;j<=matcher.groupCount();j++){
//System.out.print(" "+j+"--->"+matcher.group(j));
//}
}
}
//System.out.println(matcher.find());
}
}catch(Exception e){
e.printStackTrace();
}
以上是我在项目中解析的东西,使用还是比较简单的,容易上手。
////claStr为bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黄渤
则是从网页中解析到的内容。
直接从代码中看吧:
首先需要注意导入包为:import org.htmlparser下面的包
List<Mp3> mp3List = new ArrayList<Mp3>();
try{
Parser parser = new Parser(htmlStr);//初始化Parser,这里要注意导入包为org.htmlparser。这里参数有很多。这个地方我写的是提前获取好的html文本。也可以传入URl对象
parser.setEncoding("utf-8");//设置编码机
AndFilter filter =
new AndFilter(
new TagNameFilter("div"),
new HasAttributeFilter("id","songListWrapper")
);//通过filter找到div且div的id为songListWrapper
NodeList nodes = parser.parse(filter);//通过filter获取nodes
Node node = nodes.elementAt(0);
NodeList nodesChild = node.getChildren();
Node[] nodesArr = nodesChild.toNodeArray();
NodeList nodesChild2 = nodesArr[1].getChildren();
Node[] nodesArr2 = nodesChild2.toNodeArray();
Node nodeul = nodesArr2[1];
Node[] nodesli = nodeul.getChildren().toNodeArray();//解析出nodesli为想要的
for(int i=2;i<nodesli.length;i++){
//System.out.println(nodesli[i].toHtml());
Node tempNode = nodesli[i];
TagNode tagNode = new TagNode();//通过TagNode获得属性,只有将Node转换为TagNode才能获取某一个标签的属性
tagNode.setText(tempNode.toHtml());
String claStr = tagNode.getAttribute("class");//claStr为bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黄渤' } }
claStr = claStr.replaceAll(" ", "");
if(claStr.indexOf("\\?")==-1){
Pattern pattern = Pattern.compile("[\\s\\wa-z\\-]+\\{'songItem':\\{'sid':'([\\d]+)','sname':'([\\s\\S]*)','author':'([\\s\\S]*)'\\}\\}");
Matcher matcher = pattern.matcher(claStr);
if(matcher.find()){
Mp3 mp3 = new Mp3();
mp3.setSid(matcher.group(1));
mp3.setSname(matcher.group(2));
mp3.setAuthor(matcher.group(3));
mp3List.add(mp3);
//for(int j=1;j<=matcher.groupCount();j++){
//System.out.print(" "+j+"--->"+matcher.group(j));
//}
}
}
//System.out.println(matcher.find());
}
}catch(Exception e){
e.printStackTrace();
}
以上是我在项目中解析的东西,使用还是比较简单的,容易上手。
////claStr为bb-dotimg clearfix song-item-hook { 'songItem': { 'sid': '113275822', 'sname': '我的要求不算高', 'author': '黄渤
则是从网页中解析到的内容。
相关文章推荐
- HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
- HTML解析利器HtmlAgilityPack
- Flex 焦点相关接口
- flex 任意组件添加鼠标手型
- html容易被忽略的一些表单属性的用法
- 正则去除html标签属性保留指定标签
- html页面清除缓存
- firebug中html显示为灰色的原因总结
- Emmet快速编写HTML代码
- html中用href 实现点击链接弹出文件下载对话框
- html 弹出div实现移动居中非常好用
- htmlParser 的常用的过滤器
- html学习的几小点
- html to openxml
- 【转】html中用href 实现文件下载
- html表单
- (转)html中使用表单和input file上传图片
- 使用Ext Form自动绑定Html中的Form元素(转录)
- ext.ajax异步提交html页面form表单非formPanel(转录,谢谢作者)
- golang Beego框架之HTML表单中的select标签组件的处理 推荐