java爬虫Jsoup主要类及功能使用详解
作者:刨红薯的小羊竿尔
这篇文章主要为大家介绍了java爬虫Jsoup主要类及功能使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
一、Jsoup的主要功能
Jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
- 从一个URL,文件或字符串中解析HTML
- 使用DOM或CSS选择器来查找、取出数据
- 可操作HTML元素、属性、文本
- 根据安全的白名单清理用户提交的内容,以防止XSS攻击
- 输出整洁的HTML
二、Jsoup的主要类
1. org.jsoup.Jsoup类
Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。
| static Connection connect(String url) | 创建并返回URL的连接。 |
|---|---|
| static Document parse(File in, String charsetName) | 将指定的字符集文件解析成文档。 |
| static Document parse(String html) | 将给定的html代码解析成文档。 |
| static String clean(String bodyHtml, Whitelist whitelist) | 从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。 |
2. org.jsoup.nodes.Document类
该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。
3. org.jsoup.nodes.Element类
HTML元素是由标签名称,属性和子节点组成。 使用Element类,您可以提取数据,遍历节点和操作HTML。
三、Jsoup使用
1.maven引入
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
2.加载文档
Document document = Jsoup.connect("http://www.yiibai.com").get();
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );```
String html = "<html><head><title>First</title></head><body><p>Parsed</p></body></html>";
Document document = Jsoup.parse(html);
3.解析文档
- 根据id查询元素 getElementById
- 根据标签获取元素 getElementsByTag
- 根据class获取元素 getElementsByClass
- 根据属性获取元素 getElementsByAttribute
// 解析文件,获取doc对象
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8");
// 1,根据id查询元素 getElementById
Element element1 = doc.getElementById("people");
// 2,根据标签获取元素 getElementsByTag
Element element2 = doc.getElementsByTag("span").first();
// 3,根据class获取元素 getElementsByClass
Element element3 = doc.getElementsByClass("").first();
// 4,根据属性获取元素 getElementsByAttribute
Element element4 = doc.getElementsByAttribute("").last();
// 根据属性和属性值获取 Element element5 = doc.getElementsByAttributeValue("abc","123").last();
4.使用选择器获取元素
selector选择器概述
- tagname:通过标签查找元素,比如:span
- #id:通过ID查找元素,比如:#myqxin
- .class:通过class名称查找元素,比如:class_a
- [attribute]:利用属性查找元素,比如:[abc]
- [attr=value]:利用属性值查询元素,比如:[class=s_name]
- ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 fb:name 元素
- [attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
- [attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i).(png|jpe?g)]
- *: 这个符号将匹配所有元素
Selector选择器组合使用
- el#id: 元素+ID,比如: div#logo
- el.class: 元素+class,比如: div.masthead
- el[attr]: 元素+class,比如: a[href]
- 任意组合,比如:a[href].highlight
- ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素
- parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
- siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div
- siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h2 ~ p
- el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo
伪选择器selectors
- :lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素
- :gt(n):查找哪些元素的同级索引值大于n,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素
- :eq(n): 查找哪些元素的同级索引值与n相等,比如:form input:eq(1)表示包含一个input标签的Form元素
- :has(seletor): 查找匹配选择器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
- :not(selector): 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class="logo" 元素的所有 div 列表
- :contains(text): 查找包含给定文本的元素,搜索不区分大不写,比如: p:contains(jsoup)
- :containsOwn(text): 查找直接包含给定文本的元素
- :matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比如:div:matches((?i)login)
- :matchesOwn(regex): 查找自身包含文本匹配指定正则表达式的元素
- 注意:上述伪选择器索引是从0开始的
5. 处理元素数据
attr(String key)获取和attr(String key, String value)设置属性attributes()获得所有属性id(),className()和classNames()text()获取和text(String value)设置文本内容html()获取和html(String value)设置内部HTML内容outerHtml()获取外部HTML值data()获取数据内容(例如script和style标签)tag()和tagName()
6.操纵HTML和文本
append(String html),prepend(String html)appendText(String text),prependText(String text)appendElement(String tagName),prependElement(String tagName)html(String value)
7.从元素中提取属性,文本和HTML
在解析文档并找到一些元素之后,您将需要获取这些元素中的数据。
Element.id()Element.tagName()Element.className()和Element.hasClass(String className)
以上就是java爬虫Jsoup主要类及功能使用详解的详细内容,更多关于java爬虫Jsoup类功能的资料请关注脚本之家其它相关文章!
