2023年6月29日发(作者:)
Java爬⾍利器HTML解析⼯具-JsoupJsoup简介Java爬⾍解析HTML⽂档的⼯具有:htmlparser, Jsoup。本⽂将会详细介绍Jsoup的使⽤⽅法,10分钟搞定Java爬⾍HTML解析。Jsoup可以直接解析某个URL地址、HTML⽂本内容,它提供⾮常丰富的处理Dom树的API。如果你使⽤过JQuery,那你⼀定会⾮常熟悉。Jsoup最强⼤的莫过于它的CSS选择器⽀持了。⽐如:("t > div#image > ul > li:eq(2)。包引⼊⽅法Maven添加下⾯的依赖声明即可,最新版本是(1.12.1)
Parsed HTML into a doc.
";Document doc = (html);HTML⽚段解析String html = "Lorem ipsum.
";Document doc = odyFragment(html);Element body = ();从URL解析Document doc = t("/").get();String title = ();还可以携带cookie等参数:Document doc = t("") .data("query", "Java") .userAgent("Mozilla") .cookie("auth", "token") .timeout(3000) .post();从⽂件解析File input = new File("/tmp/");Document doc = (input, "UTF-8", "/");Jsoup遍历DOM树的⽅法使⽤标准的DOM⽅法Jsoup封装并实现了DOM⾥⾯常⽤的元素遍历⽅法:根据id查找元素: getElementById(String id)根据标签查找元素: getElementsByTag(String tag)根据class查找元素: getElementsByClass(String className)根据属性查找元素: getElementsByAttribute(String key)兄弟遍历⽅法: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()层级之间遍历: parent(), children(), child(int index)这些⽅法会返回Element或者Elements节点对象,这些对象可以使⽤下⾯的⽅法获取⼀些属性:attr(String key): 获取某个属性值attributes(): 获取节点的所有属性id(): 获取节点的idclassName(): 获取当前节点的class名称classNames(): 获取当前节点的所有class名称text(): 获取当前节点的textNode内容html(): 获取当前节点的 inner HTMLouterHtml(): 获取当前节点的 outer HTMLdata(): 获取当前节点的内容,⽤于script或者style标签等tag(): 获取标签tagName(): 获取当前节点的标签名称有了这些API,就像JQuery⼀样很便利的操作DOM。强⼤的CSS选择器⽀持你可能会说htmlparse⽀持xpath,可以很⽅便的定位某个元素,⽽不⽤⼀层⼀层地遍历DOM树。调⽤⽅法如下:(String selector): 选择匹配选择器的元素,返回是Elements对象First(String selector): 选择匹配选择器的第⼀个元素,返回是⼀个Element对象(String selector): 也可以直接在Element对象上执⾏选择⽅法Jsoup能够完美的⽀持CSS的选择器语法,可以说对应有前端经验的开发者来说简直是福⾳,不⽤特意去学习XPath的语法。⽐如⼀个XPath: //*[@id="docs"]/div[1]/h4/a, 可以转成等效的CSS选择器语法: ("#docs > div:eq(1) > h4 > a").attr("href");。看下⾯的⽰例:File input = new File("/tmp/");Document doc = (input, "UTF-8", "/");Elements links = ("a[href]"); // a with hrefElements pngs = ("img[src$=.png]"); // img with src ending .pngElement masthead = ("ad").first(); // div with class=mastheadElements resultLinks = ("h3.r > a"); // direct a after h3下⾯列出⼀些常见的选择器:标签选择(如div): tagid选择(#logo): #idclass选择(.head): .class属性选择([href]): [attribute]属性值选择: [attr=value]属性前缀匹配: [^attr]属性简单正则匹配: [attr^=value], [attr$=value], [attr*=value], [attr~=regex]另外还⽀持下⾯的组合选择器:element#id: (div#logo: 选取id为logo的div元素): (t: 选择class包括content的div元素)element[attr]: (a[href]: 选择包含href的a元素)ancestor child: (div p: 选择div元素的所有p后代元素)parent > child: (p > span: 选择p元素的直接⼦元素中的span元素)siblingA + siblingB: ( + div: 选取的下⼀个兄弟div元素)siblingA ~ siblingX: (h1 ~ p: 选取h1后⾯的所有p兄弟元素)el, el, el: (t, : 同时选取t和)当然,还⽀持伪元素选择器::lt(n): (div#logo > li:lt(2): 选择id为logo的div元素的前3个li⼦元素):gt(n):eq(n):has(selector):not(selector):contains(text)详细可参考官⽅选择器语法⽂档:Jsoup修改DOM树结构当然Jsoup还⽀持修改DOM树结构,真的很像JQuery。// 设置属性("ts a").attr("rel", "nofollow");// 设置("ad").attr("title", "jsoup").addClass("round-box");下⾯的API可以直接操作DOM树结构:text(String value): 设置内容html(String value): 直接替换HTML结构append(String html): 元素后⾯添加节点prepend(String html): 元素前⾯添加节点appendText(String text), prependText(String text)appendElement(String tagName), prependElement(String tagName)参考⽂档Jsoup官⽹地址:Jsoup官⽹指导⽂档:Jsoupjar包下载地址:JsoupCSS选择器参考:发布者:admin,转转请注明出处:http://www.yc00.com/news/1687985255a63878.html
评论列表(0条)