Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183881
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 601
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-03 18:51
个人简介

大数据算法,分布式技术,spark技术爱好者

文章分类

全部博文(29)

文章存档

2015年(4)

2014年(3)

2013年(22)

分类: Java

2013-10-09 17:37:43

最近项目需要,研究了很久的jsoup。做个小小的总结:
首先说一下jsoup是非常强大的。最常用的select(xxx[xxx~=regx])可以选择内容是某种格式的属性的某种标签。这里可以用正则表达式的。
还有一个用的很少的,而且说明文档不清楚的::eq(n),:lt(n),:gt(n)这三个伪命令。n为位置序号,当前ele的下属的第一个位置的序号是0,然后1,2。。。类推。
还有一个直接孩子的符号〉,一般来说都是用AA BB来表示AA的BB子标签。用AA 〉 BB表示直接孩子。
然后说一下jsoup解决网页编码问题:
jsoup的parser方法可以传入很多种参数,可以是Url,(String,charset),(file,charset),jsoup在parser的时候必须知道网页字符集编码,用如下方式得到:

点击(此处)折叠或打开

  1. public static String matchCharset(String content) {
  2.         String chs = "gb2312";
  3.         Pattern p = Pattern.compile("(?<=charset=)(.+)(?=\")");
  4.         Matcher m = p.matcher(content);
  5.         if (m.find())
  6.             return m.group();
  7.         return chs;
  8.     }
  9.     /**
  10.      * 获得字符集
  11.      */
  12.     public static String getCharset (File input) throws Exception{
  13.         Document doc = Jsoup.parse(input,"utf-8");
  14.         Elements eles = doc.select("meta[http-equiv=Content-Type]");
  15.         Iterator<Element> itor = eles.iterator();
  16.         while (itor.hasNext())
  17.             return matchCharset(itor.next().toString());
  18.         return "gb2312";
  19.     }
但是jsoup对网页中 处理以后得到的是无法trim掉的asc空白码,要用content=content.replace(Jsoup.parse(" ").text(),"");去掉。这条命令能同时解决 显示为???的问题。
下面这个方法只对部分编码环境有效:
content = new String(content.getBytes()).replace("?","").replace(" ","")
因为只有部分环境才会把无法解码的单元用?表示。

最后记录一下匹配基本所有常用数形的正则表达式:
(^[-+]?[1-9]\\d*(\\.[0-9]+)?$)|([1-9]\\d*(,\\d{3})*)

阅读(2508) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~