Java爬虫之jsoup的使用
背景
获取所有双色球数据,但是返回的都是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 > four</div>
div.prepend("First ");
div.append(" Last");
// 输出: <div>First five > 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的使用相关推荐
- Java爬虫之JSoup使用教程
title: Java爬虫之JSoup使用教程 date: 2018-12-24 8:00:00 +0800 update: 2018-12-24 8:00:00 +0800 author: me c ...
- Java 爬虫工具Jsoup解析
Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...
- java爬虫框架jsoup
1.java爬虫框架的api jsoup:https://www.open-open.com/jsoup/ 转载于:https://www.cnblogs.com/wuzaipei/p/1057266 ...
- java爬虫利器Jsoup的使用
对于长期使用java做编程的程序猿应该知道,java支持的爬虫框架还是有很多的,如:ebMagic.Spider.Jsoup等.今天我们就用Jsoup来实现一个小小的爬虫程序,Jsoup作为kava的 ...
- java爬虫之Jsoup入门
网络爬虫 网络爬虫概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...
- JAVA爬虫案例——JSOUP爬取图片并使用v-viewer实现图片预览
前言 网络爬虫是大数据时代收集数据的一种有效手段,合理合法的运用技术手段获取网络数据,实现数据的再利用也是程序员的一项重要技能.本节我们使用java环境下的jsoup实现网络数据的爬取,主要是图片数据 ...
- 【java爬虫】jsoup爬取网页数据-搜索算法评测/竞品评测
百度抽奖概率改4个小时频繁黑屏频繁弹出源码的前端FE T8李森:请云端高level的同学参加会议...对,我级别到了... 666666 业务背景:如何保证搜索算法的好坏?所以有了竞品评测,自己的AP ...
- 【Java爬虫】Jsoup
官网 中文使用手册 jsoup.jar官网下载 jsoup.jar百度网盘下载 提取码:g6ek jsoup是一款Java的HTML解析器,主要用来对HTML解析,可直接解析某个URL地址.HTML文 ...
- Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...
最新文章
- vue中axios如何实现token验证
- 公开SNS社区即时找朋友链的源代码和部署方案(续四)
- python 命令行参数-Python 命令行参数解析
- [CF413D]2048
- 所罗门王之梦(程序员羊皮卷读书笔记)
- No module named import_export.admin
- 【算法】《algorithm-note》算法笔记中文版正式发布!
- Cpp 对象模型探索 / 单一继承的类的内存布局
- 两年内,我要成为国内优秀的前端技术人员!
- 光棍节的快乐 NYOJ 451
- 关于ashx的基本应用
- 漏洞扫描工具MySQL_打造一款自动扫描全网漏洞的扫描器
- 远控免杀专题(10)-TheFatRat免杀(VT免杀率22/70)
- tcp 压力 测试 软件,强大的TcpServer压力测试工具及源码(附突破连接限制的方法和工具)...
- 网络攻防|一次实战中的向日葵 RCE Bypass 360
- hp170x打印服务器修改ip,HP_JetDirect_170X配置说明
- Python 学习笔记03 - 程序结构
- 上井冲刺港交所上市:人均消费金额降幅明显,只在中国经营业务
- python基本写法_Python的表达式写法
- 网站排名下降要如何优化提升排名呢