步骤一:发送请求
在开发中,我们要直接访问一个链接地址可以用:
阿帕奇的: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详解(官方)