网页flash文本抓取器( Java程序在解析中的应用场景的主要功能详解)

优采云 发布时间: 2022-02-15 22:21

  网页flash文本抓取器(

Java程序在解析中的应用场景的主要功能详解)

  jsoup爬取网页+具体讲解

  在Java程序解析HTML文档的时候,相信大家都接触过开源项目htmlparser。我之前在 IBM DW 上发表过两篇关于 htmlparser 的 文章 文章。它们是:从 HTML 中获取您需要的信息并扩展 HTMLParser 处理您自己定义的标签的能力。但现在我不再使用 htmlparser 了。原因是 htmlparser 很少更新,但最重要的是有 jsoup。

  jsoup 是一个 Java HTML 解析器。它可以直接解析一个URL地址和HTML文本内容。

  它提供了一个非常省力的 API。可以通过 DOM、CSS 和类似 jQuery 的操作方法检索和操作数据。

  jsoup的主要功能如下:

  1. 从 URL、文件或字符串解析 HTML;

  2. 使用 DOM 或 CSS 选择器来查找和检索数据;

  3. 可以操作 HTML 元素、属性、文本;

  jsoup 在 MIT 许可下发布,可以安全地用于商业项目。

  jsoup的主要类层次结构如图1所示:

  图 1. jsoup 的类层次结构

  

  接下来,我们将围绕几个常见的应用场景来说明jsoup如何优雅地处理HTML文档。

  回到顶部

  文件输入

  jsoup 可以从收录字符串、URL 地址和本地文件中加载 HTML 文档。并生成一个 Document 对象实例。

  以下是相关代码:

  清单 1

  

// 直接从字符串中输入 HTML 文档

String html = " 开源中国社区 "

+ "<p> 这里是 jsoup 项目的相关文章 ";

Document doc = Jsoup.parse(html);

// 从 URL 直接载入 HTML 文档

Document doc = Jsoup.connect("http://www.oschina.net/").get();

String title = doc.title();

Document doc = Jsoup.connect("http://www.oschina.net/")

.data("query", "Java") // 请求參数

.userAgent("I ’ m jsoup") // 设置 User-Agent

.cookie("auth", "token") // 设置 cookie

.timeout(3000) // 设置连接超时时间

.post(); // 使用 POST 方法訪问 URL

// 从文件里载入 HTML 文档

File input = new File("D:/test.html");

Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");

</p>

  请注意最后一个HTML文档输入法中parse的第三个参数。为什么这里需要指定一个URL(虽然不能指定,比如第一种方法)?因为HTML文档中会有大量的链接、图片以及外部脚本、css文件等。第三个参数 baseURL 表示 HTML 文档何时使用相对路径来引用外部文件。jsoup 会自动为这些 URL 添加前缀,即 baseURL。

  例如,开源软件将被转换为开源软件。

  回到顶部

  解析和提取 HTML 元素

  这部分介绍了一个HTML解析器的主要功能,但是jsoup使用了与其他开源项目不同的方式——选择器,我们将在最后一部分详细介绍jsoup选择器。在本节中,您将看到如何使用最简单的代码实现 jsoup。

  只是jsoup还提供了传统DOM方式的元素解析。看看下面的代码:

  列表2.

  

File input = new File("D:/test.html");

Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/");

Element content = doc.getElementById("content");

Elements links = content.getElementsByTag("a");

for (Element link : links) {

String linkHref = link.attr("href");

String linkText = link.text();

}

  您可能认为 jsoup 的方法看起来很熟悉,您是对的。getElementById 和 getElementsByTag 等方法与 JavaScript 方法同名,功能完全相同。

  您可以根据节点名称或 HTML 元素的 id 获取对应的元素或元素列表。

  与 htmlparser 项目不同。jsoup 没有为 HTML 元素定义相应的类。一般来说,一个 HTML 元素的组成部分包括:节点名、属性和文本,jsoup 提供了一种简单的方法让你自己检索这些数据,这就是 jsoup 保持苗条的原因。

  而说到元素检索,jsoup的选择器几乎是无所不能的。

  列表3.

  

File input = new File("D:\test.html");

Document doc = Jsoup.parse(input,"UTF-8","http://www.oschina.net/");

Elements links = doc.select("a[href]"); // 具有 href 属性的链接

Elements pngs = doc.select("img[src$=.png]");// 全部引用 png 图片的元素

Element masthead = doc.select("div.masthead").first();

// 找出定义了 class=masthead 的元素

Elements resultLinks = doc.select("h3.r > a"); // direct a after h3

  这是 jsoup 真正说服我的地方。Jsoup 使用与 jQuery 完全相同的选择器来检索元素。如果把上面的检索方式换成其他的HTML解释器,至少需要很多行代码,而jsoup只需要一行代码就搞定了。

  Jsoup 的选择器也支持表达式功能,我们将在最后一节介绍这个超级强大的选择器。

  回到顶部

  更改数据

  在解析文档时。我们可能需要对文档中的一些元素进行更改,例如,我们可以为文档中的所有图片添加可点击的链接,更改链接地址,或者更改文本等。

  下面是一些简单的例子:

  列表4.

  

doc.select("div.comments a").attr("rel", "nofollow");

// 为全部链接添加 rel=nofollow 属性

doc.select("div.comments a").addClass("mylinkclass");

// 为全部链接添加 class=mylinkclass 属性

doc.select("img").removeAttr(" // 删除全部图片的 onclick 属性

doc.select("input[type=text]").val(""); // 清空全部文本输入框中的文本

  原因很简单,只需要使用jsoup的选择器找到元素,然后就可以通过上面的方法进行修改,只是标签名不能改(可以删除后再插入新元素) ,包括可以改变元素的属性和文本。

  修改后直接调用Element(s)的html()方法获取修改后的HTML文档。

  回到顶部

  HTML 文档清理

  jsoup 同时提供了强大的 API。人性化也做得很好。做网站的时候。经常提供用户评论。

  有些用户很淘气。将一些脚本制作成评论内容。而这些脚本可能会破坏整个页面的行为,更严重的是,会获取一些机密信息。比如XSS跨站攻击之类的。

  jsoup 对此的支持非常强大且易于使用。看看下面的代码:

  列表5.

<p>

String unsafe = "<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线