java jsonp网络爬虫_JSOUP 爬虫

接下来我们专门针对几种常见的应用场景举例说明 jsoup 是如何优雅的进行 HTML 文档处理的。

4.文档输入

jsoup 可以从包括字符串、URL地址以及本地文件来加载 HTML 文档,并生成 Document 对象实例。

下面是相关代码:

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

String html = "

JSONP" +

"

这里是 jsoup 项目的相关文章

";

Document doc=Jsoup.parse(html);//从URL直接加载 HTML 文档

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

String title=doc.title();

Document doc= Jsoup.connect("http://www.baidu.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/");

请大家注意最后一种 HTML 文档输入方式中的 parse 的第三个参数,为什么需要在这里指定一个网址呢(虽然可以不指定,如第一种方法)?因为 HTML 文档中会有很多例如链接、图片以及所引用的外部脚本、css文件等,而第三个名为 baseURL 的参数的意思就是当 HTML 文档使用相对路径方式引用外部文件时,jsoup 会自动为这些 URL 加上一个前缀,也就是这个 baseURL。 例如 :

开源软件

会被转换成

开源软件

5.解析并提取 HTML 元素

这部分涉及一个 HTML 解析器最基本的功能,但 jsoup 使用一种有别于其他开源项目的方式——选择器,我们将在最后一部分详细介绍 jsoup 选择器,本节中你将看到 jsoup 是如何用最简单的代码实现。

不过 jsoup 也提供了传统的 DOM 方式的元素解析,看看下面的代码:

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

Document doc= Jsoup.parse(input, "UTF-8", "http://www.baidu.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 的选择器简直无所不能,

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

Document doc= Jsoup.parse(input,"UTF-8","http://www.baidu.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 的选择器还支持表达式功能,我们将在最后一节介绍这个超强的选择器。

6.修改数据

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

下面是一些简单的例子:

doc.select("div.comments a").attr("rel", "nofollow");//为所有链接增加 rel=nofollow 属性

doc.select("div.comments a").addClass("mylinkclass");//为所有链接增加 class="mylinkclass" 属性

doc.select("img").removeAttr("onclick"); //删除所有图片的onclick属性

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

道理很简单,你只需要利用 jsoup 的选择器找出元素,然后就可以通过以上的方法来进行修改,除了无法修改标签名外(可以删除后再插入新的元素),包括元素的属性和文本都可以修改。

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

7.HTML 文档清理

jsoup 在提供强大的 API 同时,人性化方面也做得非常好。在做网站的时候,经常会提供用户评论的功能。有些用户比较淘气,会搞一些脚本到评论内容中,而这些脚本可能会破坏整个页面的行为,更严重的是获取一些机要信息,例如 XSS 跨站点攻击之类的。

jsoup 对这方面的支持非常强大,使用非常简单。看看下面这段代码:

String unsafe = "

JSONP

";

String safe=Jsoup.clean(unsafe, Whitelist.basic());//输出://

JSONP

jsoup 使用一个 Whitelist 类用来对 HTML 文档进行过滤,该类提供几个常用方法:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值