有什么解决方案可以解决从网站上抓取表格数据时的范围错误吗



步骤1:我提供了访问web数据的目录,将其存储在一个变量中:

final response = await http.get(url);
dom.Document html = dom.Document.html(response.body);

final engTable = _getengFee(html.querySelectorAll(
' div > div > div > div > div > div > div > div > table:nth-child(1)')[1]);

步骤2:现在我已经创建了一个方法

static List<EngFee> _getengFee(dom.Element table) {
return table.querySelectorAll('tr').sublist(1).map((e) {
final tds = e.querySelectorAll('td');
return EngFee(
semester: tds[1].text.trim(),
admFee: int.parse(tds[2].text.trim()),
tuFee: int.parse(tds[3].text.trim()),
examFee: int.parse(tds[4].text.trim()),
miscFee: int.parse(tds[5].text.trim()),
total: int.parse(tds[6].text.trim()),
);
}).toList();
}

输出给我一个错误

E/flutter(13030):[错误:flutter/lib/ui/ui_start_state.cc(209)]未处理的异常:RangeError(index):无效值:只有有效值为0:1

E/flutter(13030):#0列表。[](dart:核心补丁/growable_array.dart:260:36)

E/flutter(13030):#1_FeeStructureState.getFee(包:fee_scraper/screens/fee_scraper.dart:40:79)

错误表示列表tds中没有值。

RangeError(索引):无效值:只有0:1是有效值。这意味着有效值仅为0,但您正在检查索引1处的元素。

若要解决此问题,可以在访问元素之前检查长度。

final tds = e.querySelectorAll('td');
return EngFee(
semester: tds.length > 1? tds[1].text.trim():"", // this will check length and add empty string if the length is 0.
admFee: tds.length > 2 ? int.tryparse(tds[2].text.trim()): 0,

相关内容

  • 没有找到相关文章

最新更新