程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Jsoup系列學習(2)-解析html文件,

Jsoup系列學習(2)-解析html文件,

編輯:JAVA綜合教程

Jsoup系列學習(2)-解析html文件,


解析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"));找到這個控件,然後堆空間進行各種操作。

說明

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值

1         //發送請求
2         Document doc = Jsoup.connect("https://www.baidu.com/").get();
3         //獲取class名為s_ipt所有element對象
4         Elements element = doc.getElementsByClass("s_ipt");
5         //獲取第一個element對象的name屬性值
6         String value = element.get(0).attr("name");
7         System.out.println(value);

 

示例2:當沒有id或name的元素,只能通過相對路徑來進行查找。

1         //發送請求
2         Document doc = Jsoup.connect("https://www.baidu.com/").get();
3         //獲取id為u1的第一個子元素
4         Element element = doc.getElementById("u1").child(0);
5         //獲取元素鏈接
6         String value1 = element.attr("href");
7         //獲取元素文本內容
8         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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved