如何将HTML Div转换为Java/JSON对象?能否通过代码读取整站HTML并转换为Java/JSON对象以提取指定Div文本?是否可使用编组器实现?
当然可以!咱们一步步拆解你的问题,给你实用的解决方案:
1. 读取网站完整HTML并提取特定Div文本
在Java生态里,Jsoup是处理HTML解析和爬虫的首选工具,它能轻松获取网站的完整HTML,还能精准定位特定标签。
步骤:
- 首先引入Jsoup依赖(Maven为例):
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.17.2</version> <!-- 建议使用最新稳定版 --> </dependency>
- 编写代码获取HTML并提取Div文本:
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class HtmlParser { public static void main(String[] args) { try { // 1. 获取目标网站的完整HTML内容 Document doc = Jsoup.connect("https://你的目标网站地址").get(); String fullHtml = doc.html(); System.out.println("完整HTML:\n" + fullHtml); // 2. 提取特定Div的文本:比如按class选择(.target-div),或按id选择(#target-id) Elements targetDivs = doc.select("div.target-div"); for (Element div : targetDivs) { // 获取Div内的所有文本(自动去除标签) String divText = div.text(); // 如果需要保留标签内的HTML结构,用div.html() System.out.println("提取到的Div文本:\n" + divText); } } catch (IOException e) { e.printStackTrace(); System.err.println("请求网站失败,请检查地址或网络"); } } }
2. 将HTML Div转换为Java/JSON对象
要把Div的内容映射为Java对象,需要先提取Div内的结构化数据,再手动或通过工具转换为对象,最后转JSON。
示例:假设你的Div结构固定
比如目标Div是:
<div class="product-card"> <h3 class="product-name">Java编程思想</h3> <p class="price">99元</p> <span class="stock">有货</span> </div>
第一步:创建对应的Java类
public class Product { private String name; private String price; private String stock; // 无参构造(序列化工具需要) public Product() {} // 带参构造 public Product(String name, String price, String stock) { this.name = name; this.price = price; this.stock = stock; } // Getter和Setter方法,自行补充 }
第二步:提取数据并转换为Java对象,再转JSON
用Jackson(Java转JSON的常用库):
- 先引入Jackson依赖:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
- 代码实现:
import com.fasterxml.jackson.databind.ObjectMapper; // ... 继续上面的代码 Elements productDivs = doc.select("div.product-card"); ObjectMapper objectMapper = new ObjectMapper(); for (Element div : productDivs) { String name = div.select("h3.product-name").text(); String price = div.select("p.price").text(); String stock = div.select("span.stock").text(); // 转换为Java对象 Product product = new Product(name, price, stock); // 转换为JSON字符串 String jsonProduct = objectMapper.writeValueAsString(product); System.out.println("转换后的JSON:\n" + jsonProduct); }
3. 关于编组器(Marshaller)的使用
Marshaller的核心作用是将Java对象序列化为XML/JSON(反过来是Unmarshaller,用于反序列化),它不能直接处理HTML。但你可以结合前面的HTML解析步骤来使用:
- 先用Jsoup提取Div的结构化数据,转换为Java对象;
- 再用Marshaller把Java对象序列化为XML或JSON。
比如用JAXB的Marshaller转XML:
- 给Product类添加JAXB注解:
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "product") public class Product { // ... 原有属性、构造方法、Getter/Setter }
- 使用Marshaller的代码:
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; // ... 在循环里创建Product对象后 JAXBContext context = JAXBContext.newInstance(Product.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化输出 // 把对象序列化为XML并打印 marshaller.marshal(product, System.out);
总结
- 读取HTML和提取Div文本:用Jsoup最便捷;
- Div转Java/JSON:先提取结构化数据映射为Java对象,再用Jackson/Gson转JSON;
- Marshaller:用于Java对象转XML/JSON,不能直接解析HTML,需配合解析工具使用。
内容的提问来源于stack exchange,提问作者SpringBootDev
相关产品推荐
相关产品推荐

