http://www.ibm.com/developerworks/cn/java/j-lo-jsouphtml/index.html
http://www.open-open.com/jsoup/parsing-a-document.htm
http://www.cnblogs.com/mooncher/archive/2012/09/18/2690806.html 【灰常好】
http://www.blogjava.net/zjusuyong/articles/304788.html 【Http深入理解】
http://weiweiabc109.blog.163.com/blog/static/2835722012111775546750/ 【http header头】
1 解析HTML
在Android应用程序开发过程中,经常需要解析HTML文档,特别是那类通过“爬网站”抓取数据的应用,比如天气预报。Java常用的解析HTML文档的方法有以下几种:
使用正则表达式来抽取数据。
以纯字符串查找定位来实现。
使用HTML Parser解析器。
使用Jsoup解析器。
在Android平台上推荐使用Jsoup解析器来解析HTML文档。Jsoup既可以通过一个URL网址,也可以通过存储HTML脚本的文件或者存储HTML脚本的字符串作为数据源,然后通过DOM、CSS选择器来查找、抽取数据。
使用Jsoup解析字符串形式的HTML文件的方法如下:
- // 定义需要解析的HTML字符串
- String html = "<html><head><title>First parse</title></head>"
- + "<body><p>Parsed HTML into a doc.</p></body></html>";
- // 将字符串解析之后放到Document对象中
- Document doc = Jsoup.parse(html);
- }
- 下面是一个具体的解析列子,使用Jsoup从HTML文件中提取出超链接、超链接文本、页面描述等内容。
- // 需要解析的HTML字符串
- String html = "<p>An <a href='http:// example.com/'><b>example</b></a> link.</p>";
- // 保存到Document对象中
- Document doc = Jsoup.parse(html);
- // 得到第一个a标签的超链接
- Element link = doc.select("a").first();
- // 取出HTML字符串中的文本内容
- // 这里test的值为 An example link
- String text = doc.body().text();
- // 获取属性为href的字符串
- // 这里linkHref的值为"http:// example.com/"
- String linklinkHref = link.attr("href");
- // 获取a标签内部的纯文本
- // linkText为 "example"
- String linklinkText = link.text();
- // 获取整个a标签里面的字符串
- // 这里linkOuterH的值为<a href="http:// example.com"><b>example</b></a>
- String linklinkOuterH = link.outerHtml();
- // 获取a标签内部(不包含a标签)的全部字符串
- // 这里linkInnerH的值为<b>example</b>
- String linklinkInnerH = link.html();
Jsoup还可以使用Whitelist()方法把不规范的HTML格式整理为规范格式,Whitelist方法定义了哪些HTML的元素和属性可以保留,其他的全部会被删除掉。Whitelist.basic()方法允许通过的文本节点为:a、b、blockquote、br、cite、code、dd、dl、dt、em、i、li、ol、p、pre、q、small、strike、strong、sub、sup、u、ul,以及相应的属性,不允许图片通过。
具体的使用方法如下:
- String unsafe =
- "<p><a href='http:// example.com/' οnclick='stealCookies()'>Link</a></p>";
- // 调用clean方法整理不标准的代码
- String safe = Jsoup.clean(unsafe, Whitelist.basic());
- // safe为<p><a href="http:// example.com/" rel="nofollow">Link</a></p>