jsoup中文1.解析和遍历一个html_第1页
jsoup中文1.解析和遍历一个html_第2页
jsoup中文1.解析和遍历一个html_第3页
jsoup中文1.解析和遍历一个html_第4页
jsoup中文1.解析和遍历一个html_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jsoupCookbook(中文版解析和遍历一个html文档解析一个html根据一个url加 对 对从元素集合抽取属性、文本和html设置元素的htmlhtml消除不受信任的html(来防止xssHTML如何解析一个HTMLStringhtml="<html><head><title>+"<body><p>ParsedHTMLintoadoc.</p></body></html>";doc=Jsoup.parse(html);(更详细内容可查看解析一个HTML字符串其解析器能够尽最大可能从你提供的HTML文档来创见一个干净的解析结果,无论HTML的格没有关闭的(比如:<p>Lorem<p>Ipsumparsesto隐式(比如.它可以自动将<td>Tabledata</td>包装创建可靠的文档结构(html包含head和body,在head只出现恰当的元素ElementsTextNodes(nodes:详细可查看:nodespackagetree). 继承Element继承Node.TextNode继承数据抽取:SelectorHTML来自用户输入,一个文件或一个的HTML字符串,你可能需要对它进行解析并取其内容,或校验其格式是否完整,或想修改它。怎么办?jsonu能够帮你轻松解决这些问题使用静态Jsoup.parse(StringhtmlJsoup.parse(Stringhtml,StringbaseUri)示例代码:Stringhtml="<html><head><title>+"<body><p>ParsedHTMLintoadoc.</p></body></html>";doc=Jsoup.parse(html);parse(Stringhtml,StringbaseUri)这方法能够将输入的HTML解析为一个新的文档( ),参数baseUri是用来将相对URL转成绝对URL,并指定从哪个获取文档。如这个方法不适用,你可以使用parse(Stringhtml)方法来解析成HTML) 中适当的方法或它父类Elementbody假如你有一个HTML片断(比如.一个div包含一对p;一个不完整的HTML文档)想对它进行解析。这个HTML片断可以是用户提交的一条评论或在一个CMSbody部使用Jsoup.parseBodyFragment(Stringhtml)方法Stringhtml="<div><p>Loremipsum.</p>";doc=Jsoup.parseBodyFragment(html);Elementbody=parseBodyFragment方法创建一个空壳的文档并解析过的HTML到body元素中。假如你使用正常的Jsoup.parse(Stringhtml方法,通常你也可以得到相同的结果,但是明确将用户输入作为body片段处理,以确保用户所提供的任何糟糕的HTML都将被解析body元素。 Stay假如你可以让用户输入HTML内容那么要避免跨站利用基于Whiist的clean(StringbodyHtmlWhiistwhiist)方法来清除用户输入的内容。URL你需要从一个获取和解析一个HTML文档,并查找其中的相关数据。你可以使用下面解决Jsoup.connect(Stringurl)方法doc=Jsoup.connect(" Stringtitle=doc.title();connect(StringurlConnection,getHTMLURL获取HTMLIOExceptiondoc= .data("query", ("auth",这个方法只支持WebURLshttp和https协议);parse(FileinStringcharsetName在本机硬盘上有一个HTMLFileinput=newFile("/tmp/input.html");doc=Jsoup.parse(input,"UTF-8", parse(Filein,StringcharsetName,StringbaseUri这个方法用来加载和解析一个HTML文件。如在加载文件的时候发生错误,将抛出IOException,应作适当处理。另外还有一个方法parse(Filein,StringcharsetName,它使用文件的路径做为baseUri。这个方法适用于如果被解析文件位于的本地文件系统,且相关也指向DOM你有一个HTML文档要从中提取数据,并了解这个HTML将HTML解析成一 之后,就可以使用类似于DOM的方法进行操作。示例代码Fileinput=newFile("/tmp/input.html");doc=Jsoup.parse(input,"UTF-8", Elementcontent=doc.ge Elementslinks=content.ge for(Elementlink:links){StringlinkHref=link.attr("href");StringlinkText=link.text();}Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。具 ementById(String ementsByTag(String ementsByClass(String ementsByAttribute(Stringkey)(andrelatedElementsiblings:siblingElements(), ementSibling();nex Graph:parent(),children(),child(intattr(Stringkey)获取属性attr(StringkeyStringvalue)设置属id(),className()andtext()获取文本内容text(Stringvaluehtml()获取元素内HTMLhtml(Stringvalue)设置元素内的HTMLouterHtml()获取元素外HTMLtag()and操作HTMLappend(Stringhtml),prepend(StringappendText(Stringtext),prependText(StringappendElement(StringtagName),prependElement(Stringhtml(String你想使用类似于CSS或jQuery可以使用Element.select(StringselectorElements.select(Stringselector)方法实现:Fileinput=newFile("/tmp/input.html");doc=Jsoup.parse(input,"UTF-8", Elementslinksdoc.select("a[href]");带有href属性的Elementspngs=//扩展名为.png的Elementmasthead= //class等于masthead的divElementsresultLinksdoc.select("h3.ra");在h3元后的a元素jsoupelements对象支持类似于CSS或jquery)的选择器语法,来实现非常强大和灵活的查找这个select方法在 ,Element,或Elements对象中都可以使用。且是上下文Select方法将返回一个Elementstagname:通过查找元素,比如ns|tag:通过在命名空间查找元素,比如:可以用fb|name语法来查#id:通过ID.class:class[attribute]:[^attr]:[^data来查找带有HTML5Dataset属性的元素[attr=value]:[attr^=value][attr$=value][attr*=value]:利用匹配属性值开头、:*:el#id:元素+IDel.class:元素+classel[attr]:元素+classancestorchild:查找某个元素下子元素,比如:可以用.bodyp查找在"body"元素下的所有p元素parentchild:div.contentp查找p元素,也可以用body>*查找body下所有直接子元素siblingA+siblingB:查找在A元前第一个同级元素B,比如+siblingA~siblingX:查找A元前的同级X元素,比如:h1~elelel:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead,div.logo:lt(n):查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3)表示小于三列的元素:gt(n):查找哪些元素的同级索引值大于n,比如divp:gt(2)div中2个以上的p元素:eq(n):查找哪些元素的同级索引值与n相等,比如:forminput:eq(1)表示包含一个input的Form元素:div包含了p:not(selector):div:not(.logo表示不包含class=logo元素的所有div列表:contains(text)::containsOwn(text):::00,第二个元素index1等可以查看SelectorAPI要取得一个属性的值,可以使用Node.attr(Stringkey对于一个元素中的文本,可以使用Element.text()对于要取得元素或属性中的HTML内容,可以使用Element.html(),Stringhtml="<p>An /'><b>example</b></a>link.</p>";doc=Jsoup.parse(html);//解析HTML字符串返回一个Elementlink ();//查找第一个a元Stringtextdoc.body().text();"Anexamplelink"//取得StringlinkHreflink.attr("href"); /"//取得地址StringlinkText=link.text();//"example""//取得地址中StringlinkOuterH=//"<a StringlinkInnerHlink.html();"<b>example</b>"//取得内的html内容Element.className()andElement.hasClass(StringElement和Elements使用CSSURLs路径的HTMLURLs在你解析文档时确保有指定baseURIabs属性前缀来取得包含baseURIdoc Elementlink=doc.select("a"). StringrelHref=link.attr("href");//=="/"StringabsHref=link.attr("abs:href");// 在HTML元素中,URLs<ahref="/download">...</a>.Node.attr(Stringkey方法来取得a元素的href属性时,它将直接返回在HTML源码中指定定的值。URL地址因此,在解析HTML文档时,定义baseURI如果你不想使用absNode.absUrl(String示例程序:获取所有这个示例程序将展示如何从一个URL获得一个页面。然后提取页面中的所有、和其它URLs和文本信息。 import*ExampleprogramtolistlinksfromapublicclassListLinkspublicstaticvoidmain(String[]args)throws{Validate.isTrue(args.length==1,"usage:supplytoStringurl=args[0];print("Fetching%s...",url);doc=Jsoup.connect(url).get();Elementslinks=doc.select("a[href]");Elementsmedia=doc.select("[src]");Elementsimports=doc.select("link[href]");print("\nMedia:(%d)",media.size());for(Elementsrc:media){if(src.tagName().equals("img"))print("*%s:<%s>%sx%s(%s)",src.tagName(),src.attr("width"),trim(src.attr("alt"),print("*%s:<%s>",src.tagName(),}print("\nImports:(%d)",imports.size());for(Elementlink:imports){print("*%s<%s>(%s)",link.tagName(),link.attr("abs:href"),link.attr("rel"));}print("\nLinks:(%d)",links.size());for(Elementlink:links){print("*a:<%s>(%s)",link.attr("abs:href"),trim(link.text(),35));}}privatestaticvoidprint(Stringmsg,Object...args){System.out.println(String.format(msg,args));}privatestaticStringtrim(Strings,intwidth){if(s.length()>width)returns.substring(0,width-1)+".";return}} Media:img: /images/y18.gif>18x18img: /images/s.gif>10x1img: /images/grayarrow.gif>ximg: /images/s.gif>0x10script: img: /images/s.gif>15x1img: /images/hnsearch.png>ximg: /images/s.gif>25x1 ogo_borderless.gif>x( yticsbyMixpan.)Imports:link /news.css>link /favicon.ico>(shortcutLinks:a: >a: /news>(Hackera: /newest>a: ments>a: /leaders>a: /jobs>a: /submit>a: ce=%6e%65%77%73>()< /archives/_gets_faste &utm_medium=feed&utm_n=Feed%3A+readwriteweb+%28ReadWriteWeb%29&utm_content=>(speedsupa: /user?id=mcxx>a: /item?id=1094578> ce=%6e%65%77%73>() fbbc8effcd914>("Tough.DjangoproducesXHTML.")a: a: /item?id=1094649> ce=%6e%65%77%73>()a: a: /lists>a: /rss>a:< a:< a: /newsfaq.html>a: /newsnews.html>(Newsa:< /item?id=363>(Featurea: >(Ya: /w2010.html>a: /lib.html>a: /html/hackernews.html>a: /?from=yc>在你解析一个之后可能想修改其中的某些属性值,然后再保存到磁盘或都输出到前Element.attr(StringkeyStringvalue),Elements.attr(Stringkey,StringclassElement.addClass(StringclassName和Element.removeClass(StringclassName)方法。Elementsclass的方法,比如:要为div中的每一个a元素都添加一个rel="nofollow"可以使用如下方法: mentsa").attr("rel",与Element中的其它方法一样,attrElement(HTML你需要一个元素中的HTML可以使用Element中的HTMLElementdiv=doc.select("div"). ();//<div></div>div.html("<p>loremipsum</p>");//<div><p>lorem </p>");//在div前添加html内div.append("<p>Last</p>");//在div之后添加html内//添完后的结果:<div><p> Elementspan= ();span.wrap("<li><a 添完后的结果 Element.html(Stringhtml这个方法将先清除元素中的HTML内容,然后用传入的HTML代替。 Element.append(String方法用于在分别在元素HTML的前面和后面添加HTML内Element.wrap(Stringaround)对元素一个外部HTML内容API参考文档中Element.prependElement(Stringtag)和Element.appendElement(Stringtag方法来创建新的元素并作为文档的子元素插你需要修改一个HTML可以使用ElementElementdiv=doc.select("div"). ();//<div></div>div.text("five>four");//<div>five>four</div> div.append("//now: five>fourHTMLsetterElement.text(Stringtext)将清除一个元素中的HTML内容,然后提供 Element.append(String<等这样的字符,将以文本处理,而非HTML消除不受信任的HTML(来防止XSS/r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论