MENU

爬取gbk乱码问题

前言

最近在爬学校图书馆借阅信息,laravel中采用的是HtmlParser扩展包,这个扩展包博主一直用来爬取教务系统,学校教务系统是正方gb2312编码,所以通过mb_convert_encoding转成utf8就解决问题。而这次爬取图书馆系统出现大问题,mb_convert_encoding转成utf8仍然是乱码。

  • 大致爬下来的样子
    58-1

解决方法

看了下该扩展作者的一篇文章,受益匪浅,原来不只是我出现这个问题。
大致原因是:DOM在解析到含有中文字的html标签的时候,遇到了非ascii字符,而这时没有解析到,DOM不知道整个html代码是什么字符集,也就无法正确判断含有中文字的html标签的编码,所以出现乱码情况。

确实,我反过来再去查看学校图书馆系统的页面,它并没有声明标签?,按照作者的说法应该是在整一个html前面添加声明才使得页面不会乱码,所以解决方法就是在curl完成之后先用mb_convert_encoding转成utf8,然后添加标签声明页面编码。

# $result为curl_exec的结果

# 用`mb_convert_encoding`转成utf8
$result = mb_convert_encoding($result, 'gb2312', 'utf-8');

# 添加<meta>标签声明页面编码
$result = '<meta http-equiv="Content-Type" content="text/html;charset=gb2312">' . $result;

处理后的结果:

58-2

标签: 技巧, 爬虫
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码