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

HTML解析提取lazyload图片data-src链接失败问题咨询

提取图书网站懒加载图片真实地址的问题修复

现有实现与问题

初始编写的元素抓取代码如下:

var listAll= document
      .querySelectorAll("div.prd-wrapper div.product-img")
      .map((e) => e.getElementsByTagName("a")[0])
      .toList();
  listAll.forEach((element) {
   print(element.innerHtml);
 });
}

运行后可在输出中看到,站点图片采用懒加载形式,真实地址存放在img标签的data-src属性上:

<img class="lazyload" data-src="https://i.dr.com.tr/cache/154x170-0/originals/0001742911001-1.jpg" alt="Minik Elif'in Tuvalet 
<img class="lazyload" data-src="https://i.dr.com.tr/cache/154x170-0/originals/0001847750001-1.jpg" alt="Unutma Mutlu Bir Hayat Çok Az 

之前编写的提取代码无法生效,核心原因是API使用逻辑错误:

var img=listAll.forEach((element) {
    print(element.getElementsByTagName("data-src").length);
  });
  • getElementsByTagName的作用是查找对应名称的HTML标签,比如a、img这类标签名,data-src是标签上的自定义属性,根本不是标签,因此永远查不到匹配结果。

修正后的可运行代码

// 存储所有提取到的真实图片地址
List<String> realImageUrls = [];

var listAll = document
    .querySelectorAll("div.prd-wrapper div.product-img")
    .map((e) => e.getElementsByTagName("a")[0])
    .toList();

listAll.forEach((aElement) {
  // 先找到a标签内部的img子元素
  var imgList = aElement.getElementsByTagName("img");
  if (imgList.isEmpty) return;
  // 读取img标签上的data-src属性,即为懒加载的真实图片地址
  var imgUrl = imgList[0].attributes["data-src"];
  if (imgUrl != null) {
    realImageUrls.add(imgUrl);
    print("获取到图片地址:$imgUrl");
  }
});

关键修改说明

  • 先从每个a标签里匹配内部的<img>子元素,不再错误查找不存在的data-src标签
  • 通过DOM元素的attributes属性字典,直接读取data-src对应的属性值
  • 增加空值判断,避免元素不存在、属性缺失时触发运行时错误

内容的提问来源于stack exchange,提问作者flutter app

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:15:29