当前位置: 首页 > news >正文

jsoup解析本地html网页到本地2

  • 在之前的jsoup解析本地html网页到本地中,虽然可以实现不同食物的解析,但是每个食物单独写一个方法实在太麻烦了
  • 注意到所有食物均属于Food的子类,且解析方法中有许多重复代码
  • 可将Food food以及Element foodDiv这两个方法中重复的参数作为通用方法的参数,提取公用方法:
// 提取公共解析逻辑到独立方法private void parseCommonFields(Element foodDiv, Food food) {String imgUrl = Objects.requireNonNull(foodDiv.selectFirst("img")).attr("src");String name = Objects.requireNonNull(foodDiv.selectFirst("h2")).text();String weight = foodDiv.select("p:contains(Weight)").text().replace("Weight: ", "");String caloriesStr = foodDiv.select("p:contains(Calories)").text().replace("Calories: ", "").replace("kcal", "").trim();int calories = Integer.parseInt(caloriesStr);String priceStr = foodDiv.select("p.price").text().replace("$", "");double price = Double.parseDouble(priceStr);String features = foodDiv.select("p.features").text().replace("Features: ", "");food.setName(name);food.setWeight(weight);food.setCalories(calories);food.setPrice(price);food.setFeatures(features);food.setImgUrl(imgUrl);}

然后,每个食物只需要调用公共方法,并提取自己的特有部分即可:

  1. Pizzas:
public List<Pizza> parsePizzas(String filePath) {List<Pizza> pizzas = new ArrayList<>();try {Document doc = Jsoup.parse(new File(filePath), "UTF-8");Elements pizzaDivs = doc.select("div.pizza");for (Element pizzaDiv : pizzaDivs) {Pizza pizza = new Pizza();parseCommonFields(pizzaDiv, pizza); // 调用公共解析方法// 只处理Pizza特有的字段String radius = pizzaDiv.select("p:contains(Radius)").text().replace("Radius: ", "");pizza.setRadius(radius);pizzas.add(pizza);}} catch (Exception e) {System.out.println("解析Pizza数据失败" + e.getMessage());}return pizzas;}
  1. FrenchFries:
public List<FrenchFries> parseFrenchFriess(String filePath) {List<FrenchFries> frenchFriesList = new ArrayList<>();try {Document doc = Jsoup.parse(new File(filePath), "UTF-8");Elements friesDivs = doc.select("div.french-fries");for (Element friesDiv : friesDivs) {FrenchFries frenchFries = new FrenchFries();parseCommonFields(friesDiv, frenchFries); // 调用公共解析方法// 只处理FrenchFries特有的字段String thickness = friesDiv.select("p:contains(Thickness)").text().replace("Thickness: ", "");frenchFries.setThickness(thickness);frenchFriesList.add(frenchFries);}} catch (IOException e) {throw new RuntimeException(e);}return frenchFriesList;}
  1. FriedChicken:
public List<FriedChicken> parseFriedChickens(String filePath) {List<FriedChicken> friedChickenList = new ArrayList<>();try {Document doc = Jsoup.parse(new File(filePath), "UTF-8");Elements friedChickenDivs = doc.select("div.fried-chicken");for (Element friedChickenDiv : friedChickenDivs) {FriedChicken friedChicken = new FriedChicken();parseCommonFields(friedChickenDiv, friedChicken); // 调用公共解析方法// 只处理FriedChicken特有的字段String spiciness = friedChickenDiv.select("p:contains(Spiciness)").text().replace("Spiciness: ", "");friedChicken.setSpiciness(spiciness);friedChickenList.add(friedChicken);}} catch (IOException e) {throw new RuntimeException(e);}return friedChickenList;}
http://www.jsqmd.com/news/20244/

相关文章:

  • Java 9 代码整洁之道:GeeCON大会技术实践
  • 2025 年新疆旅游线路服务最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 硬件编写_基于STM32单片机的汽车急控优秀的系统
  • 升级windows 11 25h2的步骤(xjl456852原创)
  • Prompt Optimizer 提示词优化器安装启用
  • 【转载】cap,pcap文件中的ipv4数据包转成ipv6数据包
  • 华为FusionCompute超融合上传ISO镜像方法教程
  • QMPlay 编译
  • 详细介绍:如何实现多人协同文档编辑器
  • Java基础全面复盘:从入门到进阶的核心要点梳理
  • 【STM32H743IIT6 系列】通过 LTDC接口驱动的 TFTLCD(RGB屏)显示
  • 10.22 —— 2024icpc沈阳D,E,B,M
  • AGV 系统的内部物流与装配智能化方案设计:应用场景与核心优势详解 - 实践
  • 报表过滤框设置默认组织提示死循环
  • UiPath License
  • 一些变换
  • vue项目浏览器内存不断增加
  • 基于伪距差分定位技术实现方案
  • prometheus服务的客户端
  • AI 辅助开发工具
  • 网安人必看!2025年最硬核的20+变现路径,学生党也能月入4位数。 - 详解
  • SightAI 企业级实战:构建高可用、低成本的 AI 应用架构 - sight
  • 应用安全 --- 安卓加固 之 软件安装白名单
  • 应用安全 --- 安卓加固 之 软件安装白名单
  • Go开发者必备:5款提升代码质量的顶级Linter工具
  • 函数作用域在解决 JavaScript 自定义元素类跨环境兼容问题中的应用
  • React-router v6学生管理系统笔记 - 教程
  • NOIP模拟赛R8
  • 深入解析:本机网速会影响到云手机的运行吗
  • 交互的脉络:小程序事件平台详解