Jsoup解析Html学习之路
来源:互联网 发布:读音软件 编辑:程序博客网 时间:2024/05/16 08:38
Jsoup解析Html学习之路
由于正则解析HTML学习难度较大,选择了Jsoup工具来解析HTML标签,对于没有学过正则的同学可以很方便的调用对象来进行解析
Jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据
接下来就来一步步学习怎么使用:
首先我们需要下载jar包,下载地址:
http://mvnrepository.com/artifact/org.jsoup/jsoup
之后我们将jar引入到工程里面,也可以使用glide来引用。
-Jsoup的主要功能
- 使用DOM或CSS选择器来查找、取出数据
- 可操作HTML元素、属性、文本
- 从一个URL,文件或字符串中解析HTML
-Jsoup简单使用
1.创建Document对象
2.通过方法取得元素
3.通过遍历Elements对象拿到值
首先第一步:
Document doc = Jsoup.connect(url).get();
url可以是String、链接地址、文件路径
如果访问出来的页面是手机端的页面,是需要添加模拟浏览器访问,使用方法:
.userAgent(“Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)”)
模拟火狐浏览器,具体想要模拟那种浏览器请自行百度
.timeout(10000)设置页面的超时时间。
让我们以http://cpc.people.com.cn/GB/194302/194306/index.html为例子来实现。
我们要获取新闻标题与内容链接。
jsoup提供类似JS获取html元素:
getElementById(String id) 用id获得元素
getElementsByTag(String tag) 用标签获得元素
getElementsByClass(String className) 用class获得元素
getElementsByAttribute(String key) 用属性获得元素
try { Document doc =Jsoup.connect("http://cpc.people.com.cn/GB/194302/194306/index.html") .userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)") .timeout(10000).get(); Elements content = doc.getElementsByClass("d2_9"); for (Element con : content) { Elements links = con.getElementsByTag("a"); for (Element link : links) { String linkHref = link.attr("href"); String linkText = link.text(); Log.e(TAG, "链接:" + linkHref); Log.e(TAG, "标题:" + linkText); } } } catch (IOException e) { e.printStackTrace(); Log.w(TAG, e.toString()); }
注意:
如果是url是链接地址是需要将这段代码放入到子线程中来操作,原因不细讲了。
获得与设置元素的数据
attr(String key) 获得元素的数据 attr(String key, String value) 设置元素数据
attributes() 获得所以属性
id(), className() classNames() 获得id class得值
text()获得文本值
text(String value) 设置文本值
html() 获取html
html(String value)设置html
outerHtml() 获得内部html
data()获得数据内容
tag() 获得tag 和 tagName() 获得tagname
-Jsoup进阶选择器使用
jsoup还提供了类似于JQuery方式的选择器
采用选择器来检索数据
tagname 使用标签名来定位,例如 a
ns|tag 使用命名空间的标签定位,例如 fb:name 来查找 元素
id 使用元素 id 定位,例如 #logo
.class 使用元素的 class 属性定位,例如 .head
* 定位所有元素
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value]使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value],[attr$=value],[attr*=value] 这三个语法分别代表,属性以 value 开头、结尾以及包含
[attr~=regex]使用正则表达式进行属性值的过滤,例如 img[src~=(?i).(png|jpe?g)]
以上是最基本的选择器语法,这些语法也可以组合起来使用
组合用法
el#id 定位id值某个元素,例如 a#logo ->
el.class 定位 class 为指定值的元素,例如 div.head ->xxxx
el[attr] 定位所有定义了某属性的元素,例如 a[href]
以上三个任意组合 例如 a[href]#logo 、a[name].outerlink
除了一些基本的语法以及这些语法进行组合外,jsoup 还支持使用表达式进行元素过滤选择
:lt(n) 例如 td:lt(3) 表示小于三列
:gt(n) div p:gt(2) 表示 div 中包含 2 个以上的 p
:eq(n) form input:eq(1) 表示只包含一个 input 的表单
:has(seletor) div:has(p) 表示包含了 p 元素的 div
:not(selector) div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表
:contains(text) 包含某文本的元素,不区分大小写,例如 p:contains(oschina)
:containsOwn(text) 文本信息完全等于指定条件的过滤
:matches(regex) 使用正则表达式进行文本过滤:div:matches((?i)login)
:matchesOwn(regex) 使用正则表达式找到自身的文本
-Jsoup获取美女网站图片地址
http://www.meiyuanguan.com/catalog.asp?page=1
try { Document doc = Jsoup.connect(url).userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").timeout(10000).get(); Elements divs = doc.getElementsByClass("lieb"); for (Element div : divs) { Elements lis = div.select("ul li"); Log.e(TAG, "content:" + lis.size()); for (Element ls : lis) { MeiYuanBen meiYuanBen = new MeiYuanBen(); Elements h2s = ls.select("h2"); for (Element h2 : h2s) { Elements as = h2.select("a[href$=.html]"); for (Element a : as) { String linkHref = a.attr("href"); String linkText = a.text(); Log.e(TAG, "h2 linkHref:" + linkHref); Log.e(TAG, "h2 linkText:" + linkText); meiYuanBen.setUrl(linkHref); meiYuanBen.setTitie(linkText); } } Elements ps = ls.select("p"); for (Element p : ps) { Elements imgs = p.select("img"); for (Element img : imgs) { String linkHref = img.attr("src"); Log.e(TAG, "p linkHref:" + linkHref); meiYuanBen.setImgurl(linkHref); } } meiYuanBens.add(meiYuanBen); } } handler.post(runnableUi); } catch (IOException e) { e.printStackTrace(); Log.w(TAG, "出异常了:" + e.toString()); }
通过每组图片对应的链接取出图片合集:
try { Document doc = Jsoup.connect(url).userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)").timeout(10000).get(); Elements content = doc.getElementsByClass("info-zi"); for (Element con : content) { Elements ps = con.getElementsByTag("p"); for (Element p : ps) { Elements imgs = p.select("img"); for (Element img : imgs) { ImgBen imgBen = new ImgBen(); String linkHref = img.attr("src"); String linkText = img.attr("title"); Log.e(TAG, "linkHref:" + linkHref); Log.e(TAG, "linkText:" + linkText); imgBen.setLink(linkHref); imgBen.setTitle(linkText); imgBens.add(imgBen); } } } handler.post(runnableUi); } catch (IOException e) { e.printStackTrace(); Log.w(TAG, "出异常了:" + e.toString()); }
通过gridview展示,具体代码就不贴了,大家学习就好。
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
- Jsoup解析Html学习之路
- jsoup 解析 html 学习
- 初识Jsoup之解析HTML
- 使用jsoup解析HTML之jsoup和HTML DOM简介
- 使用jsoup解析HTML之jsoup和HTML DOM简介
- Jsoup学习笔记3:Jsoup 解析Html源码实例
- Jsoup学习笔记4:Jsoup 解析Html源码实例
- Android学习笔记:Jsoup解析、截取HTML
- Jsoup解析Html库学习 (一)
- Jsoup解析HTML资料收集学习
- 【Jsoup学习礼记】解析一个HTML字符串
- HTML 解析器---Jsoup学习笔记
- 解析HTML之jsoup 理论篇
- Jsoup解析Html之常用方法
- Html解析之Jsoup的使用
- HTML解析器 jsoup
- HTML解析器 jsoup
- jsoup解析html
- AB 液体发泡硅胶(双组份发泡硅胶)IOTA 663A,B
- Invalid update: invalid number of rows in section 0. The number of rows contained in an ....
- phpstorm常用快捷键
- 不良资产催收的方式有哪些?
- 队列
- Jsoup解析Html学习之路
- 关于input标签的button和button的点击事件在使用window.onload无效
- java和c++的区别
- ROS学习笔记(三)补充篇pionner3 DX -win平台下开发
- angularjs中的filter(过滤器)——格式化日期的date
- 我们可以通过结构和指针构建强大的数据结构
- JAVA反射机制的简单实例和说明
- PHP PDOException 错误处理
- 详细Ping的过程 (转载+红字原创)