java爬虫Jsoup主要类及功能使用详解
刨红薯的小羊竿尔 人气:0一、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)
加载全部内容