HtmlAgilityPack 抓取中文页面乱码问题的解决方案
来源:互联网 发布:蚁群算法的数学模型 编辑:程序博客网 时间:2024/05/12 05:21
HtmlAgilityPack是用C#写的开源Html Parser。不过它的某些方面设计不尽完善,比如,按照其正常模式抓取中文网页,往往获得的是乱码。比如,抓取新华网首页(http://xinhua.org)。模仿HtmlAgilityPack示例,爬取代码如下:
HtmlWeb hw = new HtmlWeb();
string url = @"http://xinhua.org";
HtmlDocument doc = hw.Load(url);
doc.Save("output.html");
获得的页面用ie打开,是乱码。
穿越HtmlAgilityPack的代码迷宫,最后发现问题出在HtmlWeb类的Get(Uri uri, string method, string path, HtmlDocument doc)方法中。该方法有以下代码:
其中resp是http请求的response。设置断点发现resp.ContentEncoding为空。于是最后的加载行为便变成了doc.Load(s, true);而这个load方法也可能出了问题,最后得到的是乱码。
解决方法:
不使用HttpWeb,该类不成熟。自己写http请求,代码如下:
上面代码中,doc.Load(…) 使用的编码为System.Text.Encoding.Default,在我机器上为gb2312编码。
HtmlDocument也可以指定编码load stream。获得指定编码有两种方法:
(1)在HttpWebResponse 对象中可以获取html代码中设置的charset;
(2)未提供charset的html页面,HtmlDocument提供了自动检测代码的方法DetectEncoding(…)。这一方法俺为测试过,不知道正确性如何.
摘自:http://community.icburner.com/blogs/vs2010tests/archive/2009/07/09/better-html-parsing-and-validation-with-htmlagilitypack.aspx
- HtmlAgilityPack 抓取中文页面乱码问题的解决方案
- HtmlAgilityPack 抓取中文页面乱码问题的解决方案
- HtmlAgilityPack 抓取页面的乱码处理
- HtmlAgilityPack 抓取页面的乱码处理
- 真正解决HtmlAgilityPack抓取网页 中文乱码问题
- 真正解决HtmlAgilityPack抓取网页 中文乱码问题
- 利用 HtmlAgilityPack 抓取页面
- 中文乱码问题的解决方案
- 中文乱码问题的解决方案
- jsp页面的中文乱码解决方案讨论
- python3的requests抓取中文页面出现乱码
- python3的requests类抓取中文页面出现乱码
- scrapy抓取中文输出乱码解决方案
- JSP页面中文乱码解决方案
- jsp页面中文乱码解决方案
- php页面中文乱码解决方案
- 关于中文乱码问题的一些解决方案
- Java中文乱码问题的解决方案
- 上帝之数正式定为20
- phpMyAdmin
- 【中国电子商务研究中心】易观手机浏览器行业投资价值分析
- Struts2基本常识
- json数据封装和Java类的映射
- HtmlAgilityPack 抓取中文页面乱码问题的解决方案
- kettle简介
- 由脚本控制界面的流程
- 通通透透理解ThreadLocal
- oracle table()函数的使用
- HDU 1429(BFS )
- 在J2EE项目中调用外部文件的方法
- 修改Oracle XE HTTP 监听程序端口
- 小型变频器电流显示误差解决方案