Jsoup系列学习(2)-解析html文件
解析html文件
1、当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据。你可以使用下面解决方法:
使用 Jsoup.connect(String url)方法:
//发送请求
Document doc = Jsoup.connect("https://www.baidu.com/").get();
//获取id号为kw的控件
Element content = doc.getElementById("kw");
//输出控件所有属性
System.out.println(content.attributes());
输出结果
id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"
页面源代码显示,他其实与输出结果是一致的,这就好比是selenium自动化框架一样,通过 driver.findElement(By.id("kw"));找到这个控件,然后堆空间进行各种操作。

说明
connect(String url) 方法创建一个新的 Connection, 和 get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。
Connection 接口还提供一个方法链来解决特殊请求,具体如下:
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
数据抽取
1、使用DOM方法来遍历一个document对象
既然我们想要从html中获取指定数据,那么我们先得要找到该控件,我们把它叫做Elements对象,然后才是获取该控件的某些值。
查找元素
getElementById(String id) 通过id号查找getElementsByTag(String tag) 标签名查找getElementsByClass(String className) class名查找getElementsByAttribute(String key)(and related methods)- Element siblings:
siblingElements(),firstElementSibling(),lastElementSibling();nextElementSibling(),previousElementSibling() - Graph:
parent(),children(),child(int index)
元素数据
attr(String key)获取属性attr(String key, String value)设置属性attributes()获取所有属性id(),className()andclassNames()text()获取文本内容text(String value)设置文本内容html()获取元素内HTMLhtml(String value)设置元素内的HTML内容outerHtml()获取元素外HTML内容data()获取数据内容(例如:script和style标签)tag()andtagName()
操作HTML和文本
append(String html),prepend(String html)appendText(String text),prependText(String text)appendElement(String tagName),prependElement(String tagName)html(String value)
示例1:获取控件name值
//发送请求
Document doc = Jsoup.connect("https://www.baidu.com/").get();
//获取class名为s_ipt所有element对象
Elements element = doc.getElementsByClass("s_ipt");
//获取第一个element对象的name属性值
String value = element.get(0).attr("name");
System.out.println(value);
示例2:当没有id或name的元素,只能通过相对路径来进行查找。
//发送请求
Document doc = Jsoup.connect("https://www.baidu.com/").get();
//获取id为u1的第一个子元素
Element element = doc.getElementById("u1").child(0);
//获取元素链接
String value1 = element.attr("href");
//获取元素文本内容
String value2 = element.text();
输出结果:
http://news.baidu.com
新闻
参考
1、jsoup学习总结:http://blog.csdn.net/u010814849/article/details/52526582
2、http://www.open-open.com/jsoup/load-document-from-url.htm
3、jsoup学习总结:http://www.cnblogs.com/tomcattd/archive/2013/01/02/2842137.html
Jsoup系列学习(2)-解析html文件的更多相关文章
- Java(Android)解析KML文件
參考自:http://blog.csdn.net/yyywyr/article/details/38359049 http://blog.csdn.net/warrenwyf/article/deta ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- CSharpGL(9)解析OBJ文件并用CSharpGL渲染
CSharpGL(9)解析OBJ文件并用CSharpGL渲染 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...
- JAVA使用SAX解析XML文件
在我的另一篇文章(http://www.cnblogs.com/anivia/p/5849712.html)中,通过一个例子介绍了使用DOM来解析XML文件,那么本篇文章通过相同的XML文件介绍如何使 ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- CSharpGL(5)解析3DS文件并用CSharpGL渲染
CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...
- php解析.csv文件
public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar
随机推荐
- LLBL Gen Pro 5.0 企业应用开发入门
Solutions Design 公司于2016年5月发布了LLBL Gen Pro 5.0,这个新版本的发布出乎于我的意料.我的猜想是从4.2升级到4.5,再升级5.x版本,主版本号的变更会给原有客 ...
- 使用UICollectionView实现首页的滚动效果
实现类似这样的效果,可以滚动大概有两种实现方案 1. 使用scrollview来实现 2. 使用UICollectionView来实现 第一种比较简单,而且相对于性能来说不太好,于是我们使用第二种方案 ...
- C#面试题汇总(未完成)
泛型的好处: 1.可以保证类型安全以及避免装箱和拆箱操作,泛型类会在编译时由具体的类型去取代. 2.我们就拿一个ArrayList来说吧,ArrayList要进行拆箱操作,也就是ArrayList传入 ...
- [Maven]Maven入门教程
概念 Maven是什么 Maven 是一个项目管理工具.它负责管理项目开发过程中的几乎所有的东西. 版本 maven有自己的版本定义和规则 构建 maven支持许多种的应用程序类型,对于每一种支持的应 ...
- 记录软件工程课程项目开发时遇到的各种小问题(django)
1.python manage.py makemigrations 无效/无法检测出model的变化 在修改了models.py之后,我们想要更新数据库的表,使用了python manage.py m ...
- react-native ListView使用详解
刚好今天七夕,呆萌的程序猿没有妹纸,刚好发小明天结婚,我还在异地,晚上还要苦逼的赶火车.趁着下午比较闲,更新一下Blog,也算是在百无聊赖之时给众多单身程序猿们的小福利吧,虽然已经好久没更了...囧 ...
- asp.net创建事务的方法
1.建立List用于存放多条语句 /// <summary> /// 保存表单 /// </summary> /// <param name="context& ...
- C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》
上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符 ...
- 2016年最新mac下vscode配置golang开发环境支持debug
网上目前还找不到完整的mac下golang环境配置支持,本人配置成功,现在整理分享出来. mac最好装下xcode,好像有依赖关系安装Homebrew打开终端窗口, 粘贴脚本执行/usr/bin/ru ...
- PDO运用