Jsoup
- Jsoup 是一款 java 的 HTML 解析器可以直接解析 URL 地址或是 HTML 文本。可以通过 Dom、CSS已经类似于 jQuery 的操作方式提取数据。
依赖:
1 2 3 4 5
| <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency>
|
Jsoup 可解析类型:
1 2 3 4 5 6 7 8 9 10 11 12
| String url = "https://www.baidu.com/";
Document dom = Jsoup.parse(new URL(url), 3000);
|
通过URL或文件字符串解析得到的 Document
对象,就是我们可获取数据的操作对象。接下来我们将以这里百度的 dom对象为例 来获取数据。
dom方式获取元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
Element byId = dom.getElementById("su"); String val = byId.val(); System.out.println("id = "+val);
Element title = dom.getElementsByTag("title").first(); String titleText = title.text(); System.out.println("tag = "+titleText);
Element byClass = dom.getElementsByClass("s-top-left s-isindex-wrap").first();
String byClassText = byClass.text(); System.out.println("class = "+byClassText);
Element attr = dom.getElementsByAttribute("name").first(); String attrText = attr.text(); System.out.println("href = "+attrText);
Element attrByValue = dom.getElementsByAttributeValue("name","tj_zhidao").first(); String attrByValueText = attrByValue.text(); System.out.println("attrByValue = "+attrByValueText);
|
获取数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
System.out.println("元素id为:"+byId.id());
System.out.println("元素的class值为:"+byClass.className());
System.out.println("属性值为:"+attrByValue.attr("name"));
Attributes attributes = byId.attributes(); System.out.println("元素的所有属性与值:"+attributes.toString());
|
选择器获取元素:
1. 基本选择方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Element selectA = dom.select("a").first(); System.out.println("选择a标签 = "+selectA.className());
Element selectId = dom.select("#su").first(); System.out.println("通过id = "+selectId.val());
Element selectClass = dom.select(".mnav").first(); System.out.println("通过class = "+selectClass.text());
Element selectAttr = dom.select("[name=tj_zhidao]").first(); System.out.println("通过属性 = "+selectAttr.text());
|
2. 高级筛选之组合:
这里不做过多讲解与CSS的选择器类似,只以方式1为例简单介绍一下:
1 2 3 4 5 6 7 8 9
|
Element first = dom.select("[href=http://news.baidu.com]a").first(); System.out.println(first.text());
|