linux怎么查看本机内存大小
288
2022-11-25
jsoup学习笔记简明教程
目录
一.什么是jsoup
二.解析和遍历文档
三.从字符串解析文档
四.解析body部分
五.从URL加载文档
六.从文件加载文档
七.使用DOM方法浏览文档
八.使用选择器语法查找元素
九.从元素中提取属性,文本和HTML
十.将相对路径的URL解析为绝对URL
十一.设置属性值
十二.设置元素的HTML
十三. 设置元素的文本内容
十四.清理HTML
一.什么是jsoup
jsoup是一个用于实际处理HTML的Java库。它使用HTML最佳DOM方法和css选择器,为获取URL以及提取和处理数据提供了非常方便的API。
简单地说,他是一个Java爬虫给的api工具方法。
他的优点:
WHATWG HTML5规范,并将HTML解析为与现代浏览器相同的DOM.
URL,文件或字符串中抓取并解析HTML
DOM遍历或css选择器查找和提取数据
HTML元素,属性和文本
安全的白名单清除用户提交的内容,以防止XSS攻击
整洁的HTML
构建DOM树的方式,对树上的元素标签就行处理
二.解析和遍历文档
//1.测试 Jsoup.parse 的用法 String html = "
Parsed HTML into a doc.
"; Document doc = Jsoup.parse(html);解析器将尽一切努力从您提供的HTML创建干净的完整的dom树
未关闭的标签(例如
hello 解析为
hello
)隐式标签 (例如,将裸体
) 可靠得创建文档结构 (html包含head和body,并且头部中仅包含适当的元素) 文档的对象模型 文档由 Elements和TestNode组成 继承链 Document扩展Element延申Node。TextNode延申Node 一个元素包含一个子节点列表。并具有一个父元素,他们仅提供子元素的过滤列表 三.从字符串解析文档 问题: java字符串中又HTML,并且想要解析该HTML以获得其内容,或者确保其格式正确,或者对其进行修改。该字符串可能来自用户输入,文件或者来自网络 解决方案: Jsoup.parse(String html)方法或者 Jsoup .parse(String html,String baseUri)如果网页来自网络,并且你想要获取绝对URL String html = " Parsed HTML into a doc. "; Document doc = Jsoup.parse(html);四.解析body部分 问题 解析正文的HTML片段(例如,div包含几个p标签;而不是完整的HTML文档)。可能是由用户提交或评论在CMS中编辑页面的正文提供的。 解决方案 Jsoup.parsebodyFragment(String html); String html=" Lorem ipsum. "; Document doc=Jsoup.parseBodyFragment(html); Element element =doc.body();描述 parseBodyFragment方法创建一个空的shell文档,并将已解析的HTML插入body元素中,如果使用常规Jsoup.parse(String html)方法,通常会得到相同的结果,但是将输入作为主体片段进行显示处理可确保将用户提供的所有HTML都解析为body元素 Documnet.boy()方法检索文档body元素的子元素,相当于doc.getElementsByTag("body"); 五.从URL加载文档 获取并解析HTML文档,并在其中查找数据 解决方案 Jsoup.connect(String URL); Document doc3 = Jsoup.connect(" String title = doc3.title(); Document doc4 = Jsoup.connect(" .data("query", "Java") .userAgent("Mozilla") .cookie("auth", "token") .timeout(3000) .post(); String tile=doc4.title(); 描述 connect(String url) 方法创建一个new Connect,并get()获取解析一个HTML文件。如果提取网址时发生错误,就会报一个IOException,您将适当的处理它 Connect接口旨在用于方法链接以构建特定的请求 六.从文件加载文档 问题 从磁盘中读取html文件,您想要加载和解析该文件,然后可以操纵或提取其中的数据 解决方案 JSoup.parse(File in,String charsetName,String baseUri); File input = new File("/tmp/input.html");Document doc = Jsoup.parse(input, "UTF-8", "in, String charsetName, String baseUri)方法加载并解析HTML文件。如果在加载文件时发生错误,它将抛出一个IOException,您应该适当地处理它。 baseUri解析器使用该参数在 有一种姐妹方法parse(File in, String charsetName),该方法使用文件的位置作为baseUri。如果您在本地文件系统站点上工作,并且指向该站点的相对链接也在文件系统上,则此功能很有用。 七.使用DOM方法浏览文档 问题 您有一个要从中提取数据的HTML文档。通常你知道HTML文档的结构 解决问题的思路 将HTML解析之后,使用DOM的方法Document 5.使用Dom 方法浏览文档 Document doc5 = Jsoup.connect(" Elements s_map =doc5.getElementsByTag("map"); s_map.forEach((value)->{ Elements hrefs=value.getElementsByTag("area"); hrefs.forEach((href)->{ try { String URL=href.getElementsByAttribute("href").get(0).attr("href"); System.out.println("URL = " + URL); } catch (Exception e) { e.printStackTrace(); } }); }); 描述 元素提供了一系列类似于DOM的方法来查找元素,以及调取和处理数据。DOM获取器是上下文的;在父文档需要调用的时候,他在文档下找到匹配的元素 在子元素上调用后,他们在该子元素下找到了元素,这样,您就可以在所需的数据上进行筛选 寻找元素 getElementById(String id)getElementsByTag(String tag)getElementsByClass(String className)getElementsByAttribute(String key) (和相关方法)元素的兄弟姐妹:siblingElements(),firstElementSibling(),lastElementSibling(),nextElementSibling(),previousElementSibling()图:parent(),children(),child(int index) 元素数据 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() 处理HTML和文本 append(String html),prepend(String html)appendText(String text),prependText(String text)appendElement(String tagName),prependElement(String tagName)html(String value) 八.使用选择器语法查找元素 问题 您想使用css或类似jquery的选择器语法查找或操作元素 解决方案 Element.select(String selector)和Elements.select(String selector)方法: 使用选择器语法查找元素CSS或类似jquery的选择器语法查找或操作元素。使用Element.select(String selector)和Elements.select(String selector)方法: tagname:按标签查找元素,例如 a ns|tag:通过名称空间中的标签fb|name查找 九.从元素中提取属性,文本和HTML 问题 解析文档并找到一些元素以后你需要获取这些元素里的数据 解决方案 Node.attr(String key)方法 对于元素(及其组合的子元素)上的文本,请使用Element.text(); 对于使用Element.html(),或Node.outerHtml()酌情使用 例子: // 要获取属性的值,请使用Node.attr(String key)方法// 对于元素(及其组合的子元素)上的文本,请使用 Element.text()// 对于HTML,请使用Element.html(),或Node.outerHtml()酌情使用//// 例子: String html = " five > four div.prepend("First ");div.append(" Last");// now: First five > four Last 讨论区 文本设置器方法反映了HTML设置器方法: Element.text(String text) 清除元素中所有现有的内部HTML,并将其替换为提供的文本。Element.prepend(String first)和Element.append(String last)添加文本节点到开始或一个元素的内部HTML的结束 文本应以未编码的形式提供:<,>等字符将被视为文字,而不是HTML。 十四.清理HTML 问题 您要允许不受信任的用户提供HTML以在您的网站上输出(例如,作为评论提交)。您需要清除此HTML,以避免跨站点脚本(XSS)攻击。 解决方案 将jsoup HTMLCleaner用于由指定的配置Whitelist。 String unsafe = " ";String safe = Jsoup.clean(unsafe, Whitelist.basic());// now:讨论区 针对您的网站的跨站点脚本攻击可能真的毁了您的一天,更不用说用户了。许多站点通过不允许用户提交的内容中包含HTML来避免XSS攻击:它们仅强制执行纯文本,或使用替代标记语法(如Wiki-text或Markdown)。这些对用户来说很少是最佳解决方案,因为它们降低了表达能力,并迫使用户学习新语法。 更好的解决方案可能是使用富文本格式的所见即所得编辑器(例如CKEditor或TinyMCE)。这些输出HTML,并允许用户进行可视化工作。但是,它们的验证是在客户端完成的:您需要应用服务器端的验证来清理输入并确保HTML可以安全地放置在您的站点上。否则,攻击者可以避免客户端Java脚本验证并将不安全的HMTL直接注入您的站点中 jsoup白名单清理程序的工作原理是:解析输入的HTML(在安全的沙盒环境中),然后遍历解析树,仅允许将已知安全的标记和属性(和值)传递到清除的输出中。 它不使用正则表达式,这不适用于此任务。 jsoup提供了一系列Whitelist配置以满足大多数需求;如有必要,可以对其进行修改,但要小心。 清理程序不仅对避免XSS有用,而且在限制用户可以提供的元素范围方面也很有用:您可能会同意text a,strong元素,但对结构div或table元素不是很满意。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。 发表评论 |
暂时没有评论,来抢沙发吧~