You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Dart获取HTML中small标签文本遇空列表问题求助

解决Dart HTML解析中small标签文本提取失败的问题

嘿,我看你在提取small标签文本的时候踩了个语法小坑,导致返回空列表啦!咱们一步步来解决:

问题根源

你写的这段代码有语法错误:

List perfumeBrand = perfumes.map((element) => element.getElementsByTagName(('small')[0])).toList();

这里的('small')[0]会被解析成取字符串'small'的第一个字符s,相当于你在找标签名为s的元素,自然找不到任何内容,所以返回空列表。

修正代码

正确的做法是给getElementsByTagName传入完整的标签名'small',然后获取第一个匹配元素的文本内容,同时为了避免找不到元素时报错,建议用firstOrNull做安全处理:

// 修正后的perfumeBrand提取逻辑
List<String> perfumeBrand = perfumes.map((element) {
  final smallElement = element.getElementsByTagName('small').firstOrNull;
  return smallElement?.text ?? ''; // 如果没有small标签就返回空字符串
}).toList();

整合为JSON对象

接下来把所有提取到的字段(名称、品牌、图片链接、页面链接)整合成JSON对象,记得先导入dart:convert库:

import 'dart:convert';
import 'package:html/parser.dart' show parse;
import 'package:html/dom.dart';

// 假设你已经获取到了document对象
void main() {
  List<Element> perfumes = document.getElementsByClassName('cell card fr-news-box');
  
  // 提取各字段(添加了空安全处理)
  List<String> perfumeImg = perfumes.map((element) => element.getElementsByTagName('img')[0].attributes['src'] ?? '').toList();
  List<String> perfumeLink = perfumes.map((element) => element.getElementsByTagName('a')[0].attributes['href'] ?? '').toList();
  List<String> perfumeName = perfumes.map((element) => element.getElementsByTagName('a')[0].text).toList();
  List<String> perfumeBrand = perfumes.map((element) {
    final smallElement = element.getElementsByTagName('small').firstOrNull;
    return smallElement?.text ?? '';
  }).toList();

  // 整合成JSON数组
  List<Map<String, dynamic>> perfumeList = [];
  for (int i = 0; i < perfumes.length; i++) {
    perfumeList.add({
      'name': perfumeName[i],
      'brand': perfumeBrand[i],
      'imageUrl': perfumeImg[i],
      'pageUrl': perfumeLink[i],
    });
  }

  // 转换为JSON字符串
  String jsonString = jsonEncode(perfumeList);
  print(jsonString);
}

我给attributes['src']和attributes['href']加了?? ''做空安全处理,如果你确定这些属性一定存在,也可以用!断言非空,但前者会让代码更健壮。

这样就能顺利提取到small标签的文本,并且生成你需要的JSON对象啦!

内容的提问来源于stack exchange,提问作者John Doah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:04:14