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

Flutter网页爬取时如何移除href属性值开头的前置点号

解决方案

你当前硬拼接根域名和href属性值的写法,无法处理相对路径前缀,有两种可落地的实现方式:

方案1:针对性移除前置./(适配当前固定场景)

提取href值后判断前缀,裁掉开头的./字符即可,修改url生成逻辑如下:

final urls = document
    .querySelectorAll("dl > dd > a")
    .map((element) {
      final rawHref = element.attributes['href'] ?? '';
      final processedHref = rawHref.startsWith('./') ? rawHref.substring(2) : rawHref;
      return 'https://www.ous.ac.jp$processedHref';
    })
    .toList();

*该方案仅能处理./开头的相对路径,若页面存在../(上级目录跳转)类的路径会拼接错误,仅适合当前站点路径规则完全固定的场景。

方案2:用内置Uri工具自动解析路径(推荐,兼容性更强)

Dart自带的Uri类提供了相对路径解析能力,不需要手动写字符串替换规则,可自动适配./、../、无前置点号的相对路径等所有标准相对路径格式,不会出现拼接错误,实现代码如下:

// 预先定义爬取页面的基地址
final baseUri = Uri.parse('https://www.ous.ac.jp/topics/');
final urls = document
    .querySelectorAll("dl > dd > a")
    .map((element) {
      final rawHref = element.attributes['href'] ?? '';
      // 自动完成相对路径到完整URL的转换
      return baseUri.resolve(rawHref).toString();
    })
    .toList();

该方案鲁棒性更强,后续爬取其他站点也可以直接复用逻辑,不需要针对每个站点单独写路径处理规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:51:36