解析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()
andclassNames()
text()
获取文本内容text(String value)
设置文本内容html()
获取元素内HTMLhtml(String value)
设置元素内的HTML内容outerHtml()
获取元素外HTML内容data()
获取数据内容(例如:script和style标签)tag()
andtagName()
操作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