JSoup解析html常见问题

之前写了一个关于抓所以取某个网站用户信息的程序,大量的用到了关于JSoup解析html的知识。并且其中也遇到了一些问题,这类问题在我们以后的开发过程中可能还有机会遇到,所以今天在这里对这块做个总结。

一.Jsoup如何根据url获得对应的网页Document文档

1.常见写法  

doc=Jsoup.parse(new URL(url),4000);//参数2是连接超时设置,一旦超时则无法抓取到网页内容。以上是一种常见的写法,关于如何利用Jsoup获得Document文档,详细用法见http://www.jb51.net/article/43485.htm  

2.常见问题

(1)一般这样写获得Document文档是没有问题的,但也会遇到一些特殊情况。有些网站的网页数据必须要通过特定的post、Get请求方式才可以获取,如新华网的某个版块的首页必须要通过get方式才可以获取到数据。

doc=Jsoup.connect("http://forum.home.news.cn/list/50-133-0-1.html").timeout(3000).get();

(2)通过网页查看的源代码与通过程序返回的网页内容不一致,但这个问题是否出现取决于该网站是否设置了手机版和网页版2种代码返回方式,如何你在Document文档解析时发现,你解析语法明明没有任何错误,却依然无法得到解析出来的结果

doc=Jsoup.connect("http://forum.home.news.cn/list/50-133-0-ml")  

.timeout(3000) //设置超时时间  

.userAgent("Mozilla") //设置用户代理为MOZilla浏览器,强制使用网页版形式返回数据。

.cookie("auth","token") //设置cookie

.get(); //Get方式请求

二.如何解析DOM文档

      Jsoup将html代码段变成DOM文档模型(其实就是树模型),再通过DOM模型遍历元素匹配要寻找的数据.下面我们通过具体事例来学习如何解析DOM文档。我们将获取http://forum.home.news.cn/list/50-0-0-1.html页面中的所有帖子链接并输出打印。

    1.选择器语法:

     DOM文档模型由包含元素、属性、属性值组成。

    选择器一般语法形式为元素[属性=属性值]

    如根据以下这段html片段解析出其中的图片的src属性值
   


   语法形式为:

    doc.select("div[class=n_logo]").first().select("img").first().attr("src")

其中对于含有class属性则可以简化为如下形式doc.select("div.n_logo").first().select("img").first().attr("src")

对于形如

你可能感兴趣的:(Java应用)