Jsoup

来源:互联网 发布:sky 知乎日报 编辑:程序博客网 时间:2024/05/29 08:31
doc.select("div.BSHARE_POP.blkContainerSblkCon");
关键点在于两个class之间不要有空格

jsoup中选择器中某一个元素的多个条件之间不要加空格 , 加了空格下一个条件就变成子元素的条件了。

parent > child: 查找某个父元素下的直接子元素

 解析遍历HTML文档
Jsoup处理HTML文件是,是将用户输入的HTML文档,解析转换成一个Document对象进行处理。Jsoup一般支持以下几种来源内容的转换。


解析一个html字符串
解析一个body片段
根据一个url地址加载Document对象
根据一个文件加载Document对象


(一)解析一个html字符串
在处理一个html字符串。我们可能需要对其进行解析,并提取其内容,或校验其格式是否完整,或者想修改它。Jsoup可以帮助我们轻松的解决这些问题。
在Jsoup中有一个这样的静态方法Jsoup.parse(String html),可以将我们的html片段转换成Document对象。示例如下:


String html = "<div><p align=\"center\"><img alt=\"\" width=\"660\" height=\"852\" src=\"/erp/UserFiles/Image/51.jpg\" />这是P元素的内容</p>";
Document document = Jsoup.parse(html);


使用上面的方法,就可以将html字符串,转换成Document对象,一旦有了Document对象,我们就可以使用其中适当的方法根据需求处理问题。
我们可以看到这里转换的html片段并不是一个合法的html片段,里面的div标签没有闭合。
这对于Jsoup来说不是问题,它可以很好的处理这类问题。
(二)  解析body片段
假如我们现在有一个HTML片断 (比如. 一个 div 包含一对 p 标签; 一个不完整的HTML文档) 想对它进行解析。
这个HTML片断可以是用户提交的一条评论或在一个CMS页面中编辑body部分。我们可以使用使用Jsoup.parseBodyFragment(String html)方法。


示例如下:
String html = "<div><p align=\"center\"><img alt=\"\" width=\"660\" height=\"852\" src=\"/erp/UserFiles/Image/51.jpg\" />这是P元素的内容</p>";
Document document = Jsoup.parseBodyFragment(html);
看到这里可能会有疑问,这个和上面的html片段是一样的嘛。没错是一样的,parseBodyFragment 方法创建一个空壳的文档,并插入解析过的HTML到body元素中。
假如使用正常的 Jsoup.parse(String html) 方法,通常也可以得到相同的结果,但是明确将用户输入作为 body片段处理,以确保用户所提供的任何糟糕的HTML都将被解析成body元素。


Document.body() 方法能够取得文档body元素的所有子元素,与doc.getElementsByTag("body")相同。






(三) 根据一个URL地址加载Document对象
有时候我们可能希望通过一个url地址,然后提取里面的内容,转换成document对象。我们以前可能是使用http client等模拟一个请求,然后取得返回内容等,使用Jsoup方便简单的解决这个问题。示例如下:


Document document = Jsoup.connect("http://www.baidu.com").get();
String title = document.title();
String text = document.text();
connect(String url) 方法创建一个新的 Connection, 和 get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。


Connection 接口还提供一个方法链来解决特殊请求,具体如下:


Document doc = Jsoup.connect("http://test.com").data("query", "Java").userAgent("Mozilla").cookie("auth", "token").timeout(3000).post();
可以向链接地址post参数,设置userAgent,cookie,timeout等,而且这里是采用的链接操作很方便(熟悉jQuery的应该很
熟悉这样的链接操作)。


(四)根据文件加载document
有时候我们要处理的html内容,可能是存在硬盘上的某个文件里面,我们需要从中提取或者解析某些内容出来,我们可以通过Jsoup来这样处理。示例代码如下:


File input = new File("d:/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://test.com/");
看到这里可能有一个疑问,第一个参数是文件,第二是编码,第三个是什么呢?第三个参数是baseUrl,使用他我们可以方便的处理相对路径问题,如果不需要可以不传,
这是一个多态方法,在前面的三个部分里面,都可以再加一个这样的baseUrl,后面会详细讲述。

0 0
原创粉丝点击