<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解

简介: 本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。

写在前面
在现代应用中,后端服务经常返回 HTML 数据,特别是在进行 web scraping 或处理某些 API 时。Flutter 提供了强大的工具来处理和解析这些数据。本文将深入探讨如何在 Flutter 中解析后端返回的 HTML 数据,使用的工具和步骤,以及一些实际的示例。

  1. 什么是 HTML 解析?
    HTML 解析是将 HTML 文档转换为结构化的数据,以便程序可以方便地访问和操作。这在处理来自网络的内容时尤为重要,特别是当你需要提取特定的信息时。

  2. Flutter 中的 HTML 解析库
    在 Flutter 中,有几个流行的库可以帮助解析 HTML 数据:

html: 提供 DOM 操作和解析功能。
http: 用于发送 HTTP 请求,获取 HTML 数据。
2.1 添加依赖
在 pubspec.yaml 文件中添加以下依赖:

yaml

dependencies:
flutter:
sdk: flutter
http: ^0.14.0
html: ^0.15.0
运行 flutter pub get 命令来安装这些依赖。

  1. 获取 HTML 数据
    使用 http 库从后端获取 HTML 数据。下面是一个简单的示例,演示如何从某个 URL 获取 HTML 内容。

3.1 获取 HTML 示例
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'HTML Parsing Demo',
home: HomeScreen(),
);
}
}

class HomeScreen extends StatelessWidget {
Future fetchHtml() async {
final response = await http.get(Uri.parse('https://example.com'));

if (response.statusCode == 200) {
  return response.body;
} else {
  throw Exception('Failed to load HTML');
}

}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('HTML Parsing Demo')),
body: Center(
child: ElevatedButton(
onPressed: () async {
String htmlContent = await fetchHtml();
print(htmlContent);
},
child: Text('Fetch HTML'),
),
),
);
}
}

3.2 解释
使用 http.get 方法获取指定 URL 的 HTML 内容。
如果请求成功(状态码为 200),则返回 HTML 数据;否则抛出异常。

  1. 解析 HTML 数据
    获取 HTML 数据后,下一步是解析它。使用 html 库可以轻松实现这一点。

4.1 解析 HTML 示例
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' as html_parser;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'HTML Parsing Demo',
home: HomeScreen(),
);
}
}

class HomeScreen extends StatelessWidget {
Future> fetchHtmlAndParse() async {
final response = await http.get(Uri.parse('https://example.com'));

if (response.statusCode == 200) {
  // 解析 HTML
  var document = html_parser.parse(response.body);
  // 查找特定的元素,例如获取所有的链接
  var links = document.getElementsByTagName('a');
  return links.map((link) => link.attributes['href']).toList();
} else {
  throw Exception('Failed to load HTML');
}

}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('HTML Parsing Demo')),
body: Center(
child: ElevatedButton(
onPressed: () async {
List links = await fetchHtmlAndParse();
print(links); // 打印所有链接
},
child: Text('Fetch and Parse HTML'),
),
),
);
}
}

4.2 解释
使用 html_parser.parse 方法解析获取的 HTML 内容。
通过 document.getElementsByTagName('a') 获取所有的链接元素,提取它们的 href 属性。

  1. 显示解析结果
    解析出数据后,可以将其在 Flutter UI 中显示出来。例如,我们可以使用 ListView 来显示获取的链接列表。

5.1 显示链接的示例
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' as html_parser;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'HTML Parsing Demo',
home: HomeScreen(),
);
}
}

class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State {
Future> fetchHtmlAndParse() async {
final response = await http.get(Uri.parse('https://example.com'));

if (response.statusCode == 200) {
  var document = html_parser.parse(response.body);
  var links = document.getElementsByTagName('a');
  return links.map((link) => link.attributes['href']).toList();
} else {
  throw Exception('Failed to load HTML');
}

}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('HTML Parsing Demo')),
body: FutureBuilder>(
future: fetchHtmlAndParse(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else {
final links = snapshot.data ?? [];
return ListView.builder(
itemCount: links.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(links[index] ?? 'No link'),
);
},
);
}
},
),
);
}
}

5.2 解释
使用 FutureBuilder 来异步处理获取和解析 HTML 数据。
根据不同的 ConnectionState 显示加载指示器、错误信息或链接列表。
写在最后
在 Flutter 中解析后端返回的 HTML 数据是一个简单而强大的功能。通过使用 http 和 html 库,我们可以轻松获取和解析 HTML 内容,并在 UI 中显示这些信息。无论是为了数据提取还是用户界面构建,理解如何处理 HTML 数据都将为你的 Flutter 应用提供更多的可能性。

希望这篇博客对你有所帮助,欢迎评论与讨论!
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lbcyllqj/article/details/143223577

目录
相关文章
|
9天前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
60 19
|
8月前
|
数据采集 存储 调度
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
在Python网页抓取领域,BeautifulSoup和Scrapy是两款备受推崇的工具。BeautifulSoup易于上手、灵活性高,适合初学者和简单任务;Scrapy则是一个高效的爬虫框架,内置请求调度、数据存储等功能,适合大规模数据抓取和复杂逻辑处理。两者结合使用可以发挥各自优势,例如用Scrapy进行请求调度,用BeautifulSoup解析HTML。示例代码展示了如何在Scrapy中设置代理IP、User-Agent和Cookies,并使用BeautifulSoup解析响应内容。选择工具应根据项目需求,简单任务选BeautifulSoup,复杂任务选Scrapy。
157 1
BeautifulSoup VS Scrapy:如何选择适合的HTML解析工具?
|
7月前
|
存储 弹性计算 安全
阿里云服务器ECS通用型规格族解析:实例规格、性能基准与场景化应用指南
作为ECS产品矩阵中的核心序列,通用型规格族以均衡的计算、内存、网络和存储性能著称,覆盖从基础应用到高性能计算的广泛场景。通用型规格族属于独享型云服务器,实例采用固定CPU调度模式,实例的每个CPU绑定到一个物理CPU超线程,实例间无CPU资源争抢,实例计算性能稳定且有严格的SLA保证,在性能上会更加稳定,高负载情况下也不会出现资源争夺现象。本文将深度解析阿里云ECS通用型规格族的技术架构、实例规格特性、最新价格政策及典型应用场景,为云计算选型提供参考。
|
8月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
856 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
7月前
|
人工智能 自然语言处理 算法
DeepSeek大模型在客服系统中的应用场景解析
在数字化浪潮下,客户服务领域正经历深刻变革,AI技术成为提升服务效能与体验的关键。DeepSeek大模型凭借自然语言处理、语音交互及多模态技术,显著优化客服流程,提升用户满意度。它通过智能问答、多轮对话引导、多模态语音客服和情绪监测等功能,革新服务模式,实现高效应答与精准分析,推动人机协作,为企业和客户创造更大价值。
618 5
|
7月前
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
261 7
|
8月前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
10月前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
856 5
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
9月前
|
存储 人工智能 NoSQL
Tablestore深度解析:面向AI场景的结构化数据存储最佳实践
《Tablestore深度解析:面向AI场景的结构化数据存储最佳实践》由阿里云专家团队分享,涵盖Tablestore十年发展历程、AI时代多模态数据存储需求、VCU模式优化、向量检索发布及客户最佳实践等内容。Tablestore支持大规模在线数据存储,提供高性价比、高性能和高可用性,特别针对AI场景进行优化,满足结构化与非结构化数据的统一存储和高效检索需求。通过多元化索引和Serverless弹性VCU模式,助力企业实现低成本、灵活扩展的数据管理方案。
409 12
|
10月前
|
数据采集 前端开发 数据挖掘
利用 html_table 函数轻松获取网页中的表格数据
本文介绍了如何使用 R 语言中的 `html_table` 函数结合代理 IP 技术,轻松提取网页表格数据并规避反爬机制。通过设置代理和请求头,示例代码展示了如何从 58 同城采集租房信息并保存为 CSV 文件。该方法适用于需要频繁采集数据的场景,确保数据采集的高效和稳定性。
359 2
利用 html_table 函数轻松获取网页中的表格数据

推荐镜像

更多
  • DNS