背景

获取所有双色球数据,但是返回的都是html页面,需要进行处理,最开始想着用dom4j处理,发现不可行。之后想着自己处理,但是又太麻烦了,然后找到了jsoup,使用起来非常简单。

jsoup的作用

操作、解析HTML格式的数据

开始

最好是懂些CSS和jQuery的选择器,页面的结构(标签、属性、文本)等

jsoup的使用和dom4j非常类似,最开始都是先获得一个Document对象,然后获取需要的子元素或节点进行操作,但是jsoup可以通过dom、css、和类似jquery的方法(选择器)来获取需要的数据。

获取Document的四种方式

1、通过String(完整的HTML)

提供了两个方法
Jsoup.parse(String html);
/*
开发时,一般路径都是相对地址,baseUri的作用就是类似于页面中<base>标签,指定相对地址的基础URL
如果html中有<base>标签,则只需要调用parse(String html)
*/
Jsoup.parse(String html,String baseUri);String html = "<html><head><title>First parse</title></head>"+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

2、通过String(HTML片段)

使用Jsoup.parse(String html)一般来说会得到相同的结果。
区别就是该方法会将输入的任何片段解析进body元素内,而parse则不一定

方法:
Jsoup.parseBodyFragment(String html);String html = "<div><p>Lorem ipsum.</p>";
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();//doc.getElementsByTag("body")

3、从URL加载

Jsoup.connect(String url)获取一个Connection,而get()是执行这个请求,然后处理返回结果。
除此之外,Connection还可以设置cookie、请求参数、请求头等等
详见API文档

Jsoup.connect(String url);Document doc = Jsoup.connect("http://example.com/").get();Document doc = Jsoup.connect("http://example.com").data("query", "Java").userAgent("Mozilla").cookie("auth", "token").timeout(3000).post();

4、从File加载

//如果不指定baseUri,此时,则会把文件位置作为baseUri
Jsoup.parse(File in, String charsetName);
Jsoup.parse(File in, String charsetName, String baseUri);File input = new File("../tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://adamsun.com/");

获取元素

使用DOM类似的方法

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {String linkHref = link.attr("href");String linkText = link.text();
}

使用选择器语法查找元素(超好用:)

方法
Element.select(String selector);
Elements.select(String selector);File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");Elements links = doc.select("a[href]"); // 带href属性的a标签
Elements pngs = doc.select("img[src$=.png]");  // img中src以.png结尾Element masthead = doc.select("div.masthead").first();  // div中class为masthead的
Elements resultLinks = doc.select("h3.r > a"); //class为r的h3中的a标签

这里建议看下css3,jQuery中的选择器,都是类似的

选择器官方API

获取属性、文本、HTML内容

Node.attr(String key);//获取属性
Element.text();//获取元素内的文本内容
Element.html();//该元素内部html内容
Element.outerHtml();//该元素及其内部html内容String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String linkText = link.text(); // "example""String linkOuterH = link.outerHtml(); // "<a href="http://example.com"><b>example</b></a>"
String linkInnerH = link.html(); // "<b>example</b>"

其他方法详见官方API
Node
Element
Elements

对数据进修改

详见上方API , Node、Element、Elements

doc.select("div.comments a").attr("rel", "nofollow");
doc.select("div.masthead").attr("title", "jsoup").addClass("round-box");
Element div = doc.select("div").first(); // <div></div>
div.html("<p>lorem ipsum</p>"); // <div><p>lorem ipsum</p></div>
div.prepend("<p>First</p>");
div.append("<p>Last</p>");
// 输出: <div><p>First</p><p>lorem ipsum</p><p>Last</p></div>Element span = doc.select("span").first(); // <span>One</span>
span.wrap("<li><a href='http://example.com/'></a></li>");
// 输出: <li><a href="http://example.com"><span>One</span></a></li>
Element div = doc.select("div").first(); // <div></div>
div.text("five > four"); // <div>five &gt; four</div>
div.prepend("First ");
div.append(" Last");
// 输出: <div>First five &gt; four Last</div>

处理用户输入的内容,防止跨站脚本攻击

使用方式

String unsafe = "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
// 此时: <p><a href="http://example.com/" rel="nofollow">Link</a></p>

Whitelist提供了多个常用的过滤方法,来过滤不同类型的标签,但是可以通过调用Whitelist提供的方法在原来的基础上增加或减少标签。

在原来的基础上允许更多的规则通过
*   addTags(java.lang.String...);
*   addAttributes(java.lang.String, java.lang.String...);
*   addEnforcedAttribute(java.lang.String, java.lang.String, java.lang.String);
*   addProtocols(java.lang.String, java.lang.String, java.lang.String...);在原来的基础上移除部分规则
*   removeTags(java.lang.String...)
*   removeAttributes(java.lang.String, java.lang.String...)
*   removeEnforcedAttribute(java.lang.String, java.lang.String)
*   removeProtocols(java.lang.String, java.lang.String, java.lang.String...)

Whitelist官方API

作者:AdamSun19
链接:https://www.jianshu.com/p/606dcd9e363c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Java爬虫之jsoup的使用相关推荐

  1. Java爬虫之JSoup使用教程

    title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me c ...

  2. Java 爬虫工具Jsoup解析

    Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...

  3. java爬虫框架jsoup

    1.java爬虫框架的api jsoup:https://www.open-open.com/jsoup/ 转载于:https://www.cnblogs.com/wuzaipei/p/1057266 ...

  4. java爬虫利器Jsoup的使用

    对于长期使用java做编程的程序猿应该知道,java支持的爬虫框架还是有很多的,如:ebMagic.Spider.Jsoup等.今天我们就用Jsoup来实现一个小小的爬虫程序,Jsoup作为kava的 ...

  5. java爬虫之Jsoup入门

    网络爬虫 网络爬虫概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...

  6. JAVA爬虫案例——JSOUP爬取图片并使用v-viewer实现图片预览

    前言 网络爬虫是大数据时代收集数据的一种有效手段,合理合法的运用技术手段获取网络数据,实现数据的再利用也是程序员的一项重要技能.本节我们使用java环境下的jsoup实现网络数据的爬取,主要是图片数据 ...

  7. 【java爬虫】jsoup爬取网页数据-搜索算法评测/竞品评测

    百度抽奖概率改4个小时频繁黑屏频繁弹出源码的前端FE T8李森:请云端高level的同学参加会议...对,我级别到了... 666666 业务背景:如何保证搜索算法的好坏?所以有了竞品评测,自己的AP ...

  8. 【Java爬虫】Jsoup

    官网 中文使用手册 jsoup.jar官网下载 jsoup.jar百度网盘下载 提取码:g6ek jsoup是一款Java的HTML解析器,主要用来对HTML解析,可直接解析某个URL地址.HTML文 ...

  9. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

最新文章

  1. vue中axios如何实现token验证
  2. 公开SNS社区即时找朋友链的源代码和部署方案(续四)
  3. python 命令行参数-Python 命令行参数解析
  4. [CF413D]2048
  5. 所罗门王之梦(程序员羊皮卷读书笔记)
  6. No module named import_export.admin
  7. 【算法】《algorithm-note》算法笔记中文版正式发布!
  8. Cpp 对象模型探索 / 单一继承的类的内存布局
  9. 两年内,我要成为国内优秀的前端技术人员!
  10. 光棍节的快乐 NYOJ 451
  11. 关于ashx的基本应用
  12. 漏洞扫描工具MySQL_打造一款自动扫描全网漏洞的扫描器
  13. 远控免杀专题(10)-TheFatRat免杀(VT免杀率22/70)
  14. tcp 压力 测试 软件,强大的TcpServer压力测试工具及源码(附突破连接限制的方法和工具)...
  15. 网络攻防|一次实战中的向日葵 RCE Bypass 360
  16. hp170x打印服务器修改ip,HP_JetDirect_170X配置说明
  17. Python 学习笔记03 - 程序结构
  18. 上井冲刺港交所上市:人均消费金额降幅明显,只在中国经营业务
  19. python基本写法_Python的表达式写法
  20. 网站排名下降要如何优化提升排名呢

热门文章

  1. app数据分析体系 - 用户粘性 DAU,MAU 和 月人均活跃天数
  2. Spring2:bean的使用
  3. 解决npm 编译时报node_modules/optipng-bin/vendor/optipng ENOENT
  4. Unity-3D游戏开发套件指南(入门篇)-免费资源
  5. Redis使用方法介绍
  6. 通过按位与和按位或操作
  7. mysql复制--主从复制配置
  8. 【编码错误】新手程序员常见的编码错误
  9. dB,dBi和dBm的区别
  10. MySQL语句性能优化