步骤一:发送请求
在开发中,我们要直接访问一个链接地址可以用:
阿帕奇的:HttpClient.execute()
hutool的:httpUtil.sendGet()
okhttp的:okhttputil.get()
等等,有很多发送http请求的方法;
如果返回的是json格式的字符串,可以用jsonUtil的工具类,直接转换成jsonobject,然后直接jsonObject.get("key"),就可以拿到数据,那如果返回的是一个html页面呢,应该怎么获取html页面中的信息呢;
步骤二:解析 HTML
Java 提供了多个库用于解析 HTML,比如 Jsoup 和 HtmlUnit。这里以 Jsoup 为例。
引入jsoup库
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
// 引入 Jsoup 库
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
// 使用 Jsoup 解析 HTML
Document doc = Jsoup.parse(html);
步骤三:提取指定内容
根据 HTML 的结构和需要提取的内容,可以使用 Jsoup 提供的选择器来获取指定的元素。以下是几个常见的选择器示例:
根据标签名提取内容:
// 选择 <title> 标签
String title = doc.select("title").text();
// 选择 <h1> 标签
String h1 = doc.select("h1").text();
根据类名提取内容:
// 选择 class 为 "content" 的元素
String content = doc.select(".content").text();
根据 ID 提取内容:
// 选择 id 为 "main" 的元素
String mainContent = doc.select("#main").text();
其它:
你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据可以这样:
Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改:
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/";);
解析一个body片断
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();
Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。具体如下:
A:查看元素
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods)
Element siblings: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()
Graph: parent(), children(), child(int index)
B:元素数据
attr(String key)获取属性attr(String key, String value)设置属性
attributes()获取所有属性
id(), className() and classNames()
text()获取文本内容text(String value) 设置文本内容
html()获取元素内HTMLhtml(String value)设置元素内的HTML内容
outerHtml()获取元素外HTML内容
data()获取数据内容(例如:script和style标签)
tag() and tagName()
C:操作HTML和文本
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)
从元素抽取属性,本文和HTML
String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);//解析HTML字符串返回一个Document实现
Element link = doc.select("a").first();//查找第一个a元素
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>"//取得链接内的html内容
等等还有很多方法,具体可参考:
Jsoup(一)Jsoup详解(官方)