Jsoup系列学习(2)-解析html文件

编程爱好者联盟 2016-12-06

解析html文件

1、当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据。你可以使用下面解决方法:

使用 Jsoup.connect(String url)方法:

//发送请求
        Document doc = Jsoup.connect("https://www.baidu.com/").get();
        //获取id号为kw的控件
        Element content = doc.getElementById("kw");
        //输出控件所有属性
        System.out.println(content.attributes());
输出结果 id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"

页面源代码显示,他其实与输出结果是一致的,这就好比是selenium自动化框架一样,通过 driver.findElement(By.id("kw"));找到这个控件,然后堆空间进行各种操作。

Jsoup系列学习(2)-解析html文件

说明

connect(String url) 方法创建一个新的 Connection, get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。

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

Document doc = Jsoup.connect("http://example.com")
  .data("query", "Java")
  .userAgent("Mozilla")
  .cookie("auth", "token")
  .timeout(3000)
  .post();

 数据抽取

1、使用DOM方法来遍历一个document对象

既然我们想要从html中获取指定数据,那么我们先得要找到该控件,我们把它叫做Elements对象,然后才是获取该控件的某些值。

  • 查找元素 getElementById(String id)   通过id号查找
  • getElementsByTag(String tag) 标签名查找
  • getElementsByClass(String className) class名查找
  • getElementsByAttribute(String key) (and related methods)
  • Element siblings: siblingElements(), firstElementSibling(), lastElementSibling();nextElementSibling(), previousElementSibling()
  • Graph: parent(), children(), child(int index) 

元素数据

  • attr(String key)获取属性attr(String key, String value)设置属性
  • attributes()获取所有属性
  • id(), className() and classNames()
  • text()获取文本内容text(String value) 设置文本内容
  • html()获取元素内HTMLhtml(String value)设置元素内的HTML内容
  • outerHtml()获取元素外HTML内容
  • data()获取数据内容(例如:script和style标签)
  • tag() and tagName()

操作HTML和文本

  • append(String html), prepend(String html)
  • appendText(String text), prependText(String text)
  • appendElement(String tagName), prependElement(String tagName)
  • html(String value)

 示例1:获取控件name值

//发送请求
         Document doc = Jsoup.connect("https://www.baidu.com/").get();
         //获取class名为s_ipt所有element对象
         Elements element = doc.getElementsByClass("s_ipt");
         //获取第一个element对象的name属性值
         String value = element.get(0).attr("name");
         System.out.println(value);

示例2:当没有id或name的元素,只能通过相对路径来进行查找。

//发送请求
         Document doc = Jsoup.connect("https://www.baidu.com/").get();
         //获取id为u1的第一个子元素
         Element element = doc.getElementById("u1").child(0);
         //获取元素链接
         String value1 = element.attr("href");
         //获取元素文本内容
         String value2 = element.text();

输出结果:

http://news.baidu.com
新闻

参考

1、jsoup学习总结:http://blog.csdn.net/u010814849/article/details/52526582

2、http://www.open-open.com/jsoup/load-document-from-url.htm

3、jsoup学习总结:http://www.cnblogs.com/tomcattd/archive/2013/01/02/2842137.html

相关推荐