注册免费的网站挂机宝做php网站吗
web/
2025/9/27 4:06:22/
文章来源:
注册免费的网站,挂机宝做php网站吗,运城做网站,响应式网站设计工具转载自 Jsoup代码解读之一-概述今天看到一个用python写的抽取正文的东东#xff0c;美滋滋的用Java实现了一番#xff0c;放到了webmagic里#xff0c;然后发现Jsoup里已经有了…觉得自己各种不靠谱啊#xff01;算了#xff0c;静下心来学学好东西吧#xff01;
Jsoup…转载自 Jsoup代码解读之一-概述今天看到一个用python写的抽取正文的东东美滋滋的用Java实现了一番放到了webmagic里然后发现Jsoup里已经有了…觉得自己各种不靠谱啊算了静下心来学学好东西吧
Jsoup是Java世界用作html解析和过滤的不二之选。支持将html解析为DOM树、支持CSS Selector形式选择、支持html过滤本身还附带了一个Http下载器。从今天开始会写一个Jsoup源码解读系列比起之前的博客尽量会写的详尽一些。
概述
Jsoup的代码相当简洁Jsoup总共53个类且没有任何第三方包的依赖对比最终发行包9.8M的SAXON实在算得上是短小精悍了。
jsoup
├── examples #样例包括一个将html转为纯文本和一个抽取所有链接地址的例子。
├── helper #一些工具类包括读取数据、处理连接以及字符串转换的工具
├── nodes #DOM节点定义
├── parser #解析html并转换为DOM树
├── safety #安全相关包括白名单及html过滤
└── select #选择器支持CSS Selector以及NodeVisitor格式的遍历使用
Jsoup的入口是Jsoup类。examples包里提供了两个例子解析html后分别用CSS Selector以及NodeVisitor来操作Dom元素。
这里用ListLinks里的例子来说明如何调用Jsoup
!-- lang: java --
public static void main(String[] args) throws IOException {Validate.isTrue(args.length 1, usage: supply url to fetch);String url args[0];print(Fetching %s..., url);// 下载url并解析成html DOM结构Document doc Jsoup.connect(url).get();// 使用select方法选择元素参数是CSS Selector表达式Elements links doc.select(a[href]);print(\nLinks: (%d), links.size());for (Element link : links) {//使用abs:前缀取绝对url地址print( * a: %s (%s), link.attr(abs:href), trim(link.text(), 35));}
}Jsoup使用了自己的一套DOM代码体系这里的Elements、Element等虽然名字和概念都与Java XML APIorg.w3c.dom类似但并没有代码层面的关系。就是说你想用XML的一套API来操作Jsoup的结果是办不到的但是正因为如此才使得Jsoup可以抛弃xml里一些繁琐的API使得代码更加简单。
还有一种方式是通过NodeVisitor来遍历DOM树这个在对整个html做分析和替换时比较有用
!-- lang: java --
public interface NodeVisitor {//遍历到节点开始时调用此方法public void head(Node node, int depth);//遍历到节点结束时(所有子节点都已遍历完)调用此方法public void tail(Node node, int depth);
}HtmlToPlainText的例子说明了如何使用NodeVisitor来遍历DOM树将html转化为纯文本并将需要换行的标签替换为换行\n
!-- lang: java --
public static void main(String... args) throws IOException {Validate.isTrue(args.length 1, usage: supply url to fetch);String url args[0];// fetch the specified URL and parse to a HTML DOMDocument doc Jsoup.connect(url).get();HtmlToPlainText formatter new HtmlToPlainText();String plainText formatter.getPlainText(doc);System.out.println(plainText);
}public String getPlainText(Element element) {//自定义一个NodeVisitor - FormattingVisitorFormattingVisitor formatter new FormattingVisitor();//使用NodeTraversor来装载FormattingVisitorNodeTraversor traversor new NodeTraversor(formatter);//进行遍历traversor.traverse(element);return formatter.toString();
}下一节将从DOM结构开始对Jsoup代码进行分析。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82530.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!