jsoup
解析url
package Jsoup;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
public class JsoupTest {
@Test
public void testUrl() throws IOException {
Document doc = Jsoup.parse(new URL("http://www.baidu.com"), 3000);
Elements title1 = doc.getElementsByTag("link");
for (Element e:title1
) {
System.out.println(e);
}
}
}
//输出
<link rel="dns-prefetch" href="//dss1.bdstatic.com">
<link rel="dns-prefetch" href="//ss1.bdstatic.com">
<link rel="dns-prefetch" href="//sp0.baidu.com">
<link rel="dns-prefetch" href="//sp1.baidu.com">
<link rel="dns-prefetch" href="//sp2.baidu.com">
解析字符串
@Test
public void testString() throws Exception{
//获取字符串.由html组成的txt文本。
String s = FileUtils.readFileToString(new File("C:\\Users\\DELL\\Desktop\\demo.txt"), "utf-8");
//解析字符串
Document doc = Jsoup.parse(s);
Elements title = doc.getElementsByTag("title");
System.out.println(title);
}
}
//输出
<title>百度一下,你就知道</title>
解析文件
@Test
public void testFile() throws Exception{
Document document = Jsoup.parse(new File("C:\\Users\\DELL\\Desktop\\demo.txt"), "utf8");
Elements title = document.getElementsByTag("title");
System.out.println(title);
}
使用DOM方式遍历文档
获取Element 最常用的四种方式
-
根据id getElementById
-
根据tag getElementsByTag
如
<h1>,<title>,<li>
,开头的标签类型。class不可以。
-
根据 class getElementsByClass
如class=“bar”
-
根据attribute获取元素 getElementsByAttribute
如class,等以及自己命名的属性
li,h1不可以,这是tag,不是属性。
由Element获取数据
- 获取id
- 获取className
- 获取attribute以及attributes
- 获取text
@Test
public void testTraverse() throws Exception {
Document document = Jsoup.parse(new File("C:\\Users\\DELL\\Desktop\\demo.html"), "utf-8");
Element element = document.getElementById("lili");
System.out.println(element);
System.out.println(element.id());
System.out.println(element.className());
System.out.println(element.text());
System.out.println(element.attr("class"));
element.attributes().forEach(s->{
System.out.println(s);
});
}
//
element
<li id="lili" class="class_a class_b">
<a href="http://www.baidu.com" target="_blank">
<span class="s_name"> 内径
</span>
</a>
</li>
//id();
lili
//className()
class_a class_b
//text()
内径
//attr(key,val)
class_a class_b
//attributes()
id="lili"
class="class_a class_b"
selector选择器
如document.select(String cssQuery)
document.select(Evaluator evaluator)
参数:
-
tagname
如span,li,h2
-
#id
#187
-
.class
.class_a
-
[attribute]
[abc]
-
[attr=value]
@Test
public void testTraverse() throws Exception {
Document document = Jsoup.parse(new File("C:\\Users\\DELL\\Desktop\\demo.html"), "utf-8");
System.out.println(document.select("h1"));//tagname
System.out.println(document.select("#lili"));//#id
System.out.println(document.select(".class_a"));//.class
System.out.println(document.select("[food=187]"));//[attr] or [attr=val]
}
}
组合使用
- tagname#id
- tagname.class
- tagname[attr]
- 以上任意组合
- ancestor child:查询某个元素下子元素
- parent>chid:查询某个元素下直接子元素
- parent>*:查询某个元素下所有直接子元素
获取内径,
document.select("li#lili span.a_name")
html原码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>网页标题</title>
<meta name="keywords" content="关键字列表" />
<meta name="description" content="网页描述" />
<link rel="stylesheet" type="text/css" href="" />
<style type="text/css"></style>
<script type="text/javascript"></script>
</head>
<body>
<h2 align="center" class="class_a class_b">PHP介绍</h2>
<h2 align="center" food="187">PHP介绍2</h2>
<h2 align="center" class="class_a ">PHP介绍3</h2>
<h3><i><b>PHP未来和发展趋势:</b></i></h3>
<ol>
<li>我就买了一<font color="red">5000万</font>个账号,全国各省市的房建、市政、公路、园<font color="red">60%</font>林、水利、土地整理</li>
<li>什么叫关联? 难<b><u>42</u></b>%不成我建一张<b><u>13%</b></u>表格后,所有与此工艺<b><u>24%</b></u>相关的表格</li>
<li>批量勾选关联或<b><u>80%以上</u></b>表格生成实例工程,然后规划一下验收部位,再</li>
<li>批量勾选关联或表格生成实例工程,然后规划一下验收部位,再</li>
</ol>
<hr border="2" color="#330000"/>
<h1 id="test"><b><i>PHP灵活的高效性实现了各种终端和平台的互联网应用</i></b></h1>
<ol>
<li>备份导出工程文件、模板文件,连关联、个人设置啥都行。</li>
<li>备份导出工程文件、模板文件,连关联、个人设置啥都行。</li>
<li>备份导出工程文件、模板文件,连关联、个人设置啥都行。</li>
<li>备份导出工程文件、模板文件,连关联、个人设置啥都行。</li>
</ol>
<p> 示例随机数、<u>混凝土强度自动计算</u>、<u>工程概况自动填写</u>、<u>表格编辑</u>、<u>公式录入</u>, 这么Low的功能早就有了,资料软件必备的,还用介绍吗?批量勾选关联或表格生成实例工程,然后规划一下验收部位,再点击生成……等……等……等……完成了??? 那我还做什么?哦,打印机得去开电源了。咦,难不成其它单位工程也可以用这个实例规划生成? 爽爆了!示例随机数、混凝土强度自动计算、工程概况自动填写、表格编辑、公式录入, 这么Low的功能早就有了,<font color="red" size="5"><u><b><i>资料软件必备的,还用介绍吗</i></b></u></font>?
</p>
<hr border="2" color="#330000"/>
<h2 id="1"><b>PHP就业现状</b></h2>
<h2 id="2"><b>PHP就业现状</b></h2>
<p> 批量勾选关联或表格生成实例工程,然后规划一下验收部位,再点击生成……等……等……等……完成了??? 那我还做什么?哦,打印机得去开电源了。咦,难不成其它单位工程也可以用这个实例规划生成? 爽爆了!批量勾选关联或表格生成实例工程,然后规划一下验收部位,再点击生成……等……等……等……完成了??? 那我还做什么?哦,打印机得去开电源了。咦,难不成其它单位工程也可以用这个实例规划生成? 爽爆了!</p>
<hr border="2" color="#330000"/>
<h1>今天你要去哪里?</h1>
<ul>
<li><u><font color="#0000ff">新浪</font></u><br/>
什么叫关联? 难不成我建一张表格后,所有与此工艺相关的表格都会自动建立?
</ul>
<ul>
<li><u><font color="#0000ff">百度</font></u><br/>
什么叫关联? 难不成我建一张表格后,所有与此工艺相关的表格都会自动建立?
</ul>
<ul>
<li><u><font color="#ff15ff">网易</font></u><br/>
什么叫关联? 难不成我建一张表格后,所有与此工艺相关的表格都会自动建立?
</ul>
<ul>
<li><b><font size="6">去我页面看看:</font></b></li>
</ul>
<ol>
<li id="lili" class="class_a class_b">
<a href="http://www.baidu.com" target="_blank">
<span class="a_name">
内径
</span>
</a>
<a href="http://www.baidu" target="_blank">
<span class="b_name">
内径s
</span>
</a>
</li>
<li><u><font color="#0000ff">page2</font></u> <表格都会自动建立></li>
<li><u><font color="#0000ff">page3</font></u> <表格都会自动建立></li>
<li><u><font color="#0000ff">page4</font></u> <表格都会自动建立></li>
<li> color="#0000ff">page5 <表格都会自动建立></li>
</ol>
<hr border="2" color="#330000"/>
</body>
</html>