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

Flutter网页抓取:求替代HTML包及解决目标站UTF编码报错方案

解决Dart http包抓取特定网站的UTF编码错误及网页抓取包推荐

一、UTF编码错误的解决方法

你遇到的问题是因为目标网站返回的内容编码不是默认的UTF-8,而http包默认用UTF-8解析响应body,导致解码失败。可以通过手动处理响应字节来解决:

修改代码,直接操作响应的字节流,指定正确的编码解码:

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> signin() async{
  var res = await http.get(Uri.parse("https://student.kletech.ac.in/code/index.php"));
  // 方法1:允许解码时忽略无效字节,兼容大部分编码问题
  String body = utf8.decode(res.bodyBytes, allowMalformed: true);
  // 方法2:如果确认网站用的是Latin1编码,直接用latin1解码
  // String body = latin1.decode(res.bodyBytes);
  print(body);
}

如果不确定编码,可以先查看响应头里的Content-Type字段,里面通常会标注编码类型(比如text/html; charset=ISO-8859-1),根据这个指定对应的解码器即可。

二、Flutter好用的网页抓取HTML包推荐

  • html包:官方维护的HTML解析工具,能将HTML字符串转为DOM节点,支持用CSS选择器(querySelector/querySelectorAll)查询元素,适合静态页面的结构化解析。
  • web_scraper包:集成了HTTP请求和HTML解析,直接通过CSS选择器就能提取目标数据,API简洁,新手友好,适合快速完成简单的抓取需求。
  • dio + html组合:dio是功能更强的HTTP客户端,支持拦截器、Cookie管理、大文件下载等,配合html包使用,能处理需要自定义请求头、带登录态的复杂抓取场景。
  • scraper包:支持XPath和CSS选择器两种查询方式,适合需要从复杂HTML结构中提取深层数据的场景。
  • html_parser包:轻量级解析工具,提供简单的遍历API,适合小型项目或对包体积有要求的场景。

内容的提问来源于stack exchange,提问作者Athar Mujtaba Wani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:45:04