nodejs爬虫遇到的乱码问题汇总


Posted in NodeJs onApril 07, 2017

上一篇文章中使用nodejs程序解析了网页编码为gbk,gb2312,以及utf-8的情况,这里面有三种特殊的乱码情况需要单独的说明一下.

1,网页编码为utf-8,但是解析为乱码,代表网站为www.guoguo-app.com。

这个问题真是个逗逼问题,查看网页源码中给出的编码方式为utf8,如下:

<meta charset="UTF-8">
<title>查快递</title>

由于解析出来的始终是乱码,我就抓包看了下,报文中的编码方式为gbk,果然我使用gbk的方式之后,得到的不再是乱码了。淘宝为了反爬虫也是操碎了新,但是我也很好奇这种方式是怎么实现的,知道的告诉我。

GET / HTTP/1.1
Host: www.guoguo-app.com
Connection: close

HTTP/1.1 200 OK
Date: Thu, 06 Apr 2017 01:56:23 GMT
Content-Type: text/html;charset=GBK
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
Vary: Accept-Encoding
Content-Language: zh-CN
Server: Tengine/Aserver

1,网页编码为utf-8,解析为乱码情况二,代表网站http//andersonjiang.blog.sohu.com/

单纯的查看网页源码看不出任何毛病,于是我又抓了一次包,得到如下情形:

GET / HTTP/1.1
Host: andersonjiang.blog.sohu.com
Connection: close

HTTP/1.1 200 OK
Content-Type: text/html; charset=GBK
Transfer-Encoding: chunked
Connection: close
Server: nginx
Date: Thu, 06 Apr 2017 02:10:33 GMT
Vary: Accept-Encoding
Expires: Thu, 01 Jan 1970 00:00:00 GMT
RHOST: 192.168.110.68@11177
Pragma: No-cache
Cache-Control: no-cache
Content-Language: en-US
Content-Encoding: gzip
FSS-Cache: MISS from 13539701.18454911.21477824
FSS-Proxy: Powered by 9935166.11245896.17873234

andersonjiang.blog.sohu.com这个网站同时采用了Transfer-Encoding: chunked传输编码和Content-Encoding: gzip内容编码功能,由于nodejs爬虫没有gzip解包功能,因此该网站提取不到任何字段,即title和charset等。要想提取此类网站则要添加gzip解包功能。

下面两个网站www.cr173.com以及www.csdn.net是正常的抓包情况。

GET / HTTP/1.1
Host: www.cr173.com
Connection: close

HTTP/1.1 200 OK
Expires: Thu, 06 Apr 2017 02:42:20 GMT
Date: Thu, 06 Apr 2017 02:12:20 GMT
Content-Type: text/html
Last-Modified: Thu, 06 Apr 2017 00:52:42 GMT
ETag: "96a4141970aed21:0"
Cache-Control: max-age=1800
Accept-Ranges: bytes
Content-Length: 158902
Accept-Ranges: bytes
X-Varnish: 1075189606
Via: 1.1 varnish
X-Via: 1.1 dxxz46:4 (Cdn Cache Server V2.0), 1.1 oudxin15:1 (Cdn Cache Server V2.0)
Connection: close
GET / HTTP/1.1
Host: www.csdn.net
Connection: close

HTTP/1.1 200 OK
Server: openresty
Date: Thu, 06 Apr 2017 02:18:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 99363
Connection: close
Vary: Accept-Encoding
Last-Modified: Thu, 06 Apr 2017 02:10:02 GMT
Vary: Accept-Encoding
ETag: "58e5a37a-18423"
Accept-Ranges: bytes

3,网页编码为其他形式的编码,解析为乱码,例如:

(1)编码为Big5,代表网站为 www.ruten.com.tw, www.ctgoodjobs.hk

(2)编码为Shift_JIS,代表网站为www.vector.co.jp,www.smbc.co.jp

(3)编码为windows-12,代表网站为www.tff.org,www.pravda.com.ua

(4)编码为EUC-JP,代表网站为www.showtime.jp

(5)编码为EUC-KR ,代表网站为www.incruit.com,www.samsunghospital.com,

由于iconv-lite的说明中支持如下的编码方式:

Currently only a small part of encodings supported:

All node.js native encodings: 'utf8', 'ucs2', 'ascii', 'binary', 'base64'.
 Base encodings: 'latin1'
 Cyrillic encodings: 'windows-1251', 'koi8-r', 'iso 8859-5'.
 Simplified chinese: 'gbk', 'gb2313'.

Other encodings are easy to add, see the source. Please, participate
因此对于上述出现的网页编码,只有自己添加解码方式加以解决了。

总之要写一个通用的爬虫程序还有很长的路要走。

NodeJs 相关文章推荐
nodejs实用示例 缩址还原
Dec 28 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
nodejs教程之异步I/O
Nov 21 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
详解NodeJs开发微信公众号
May 25 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 #NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 #NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 #NodeJs
3分钟快速搭建nodejs本地服务器方法运行测试html/js
Apr 01 #NodeJs
nodejs使用express创建一个简单web应用
Mar 31 #NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 #NodeJs
NodeJs测试框架Mocha的安装与使用
Mar 28 #NodeJs
You might like
php GD绘制24小时柱状图
2008/06/28 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
js 实现css风格选择器(压缩后2KB)
2012/01/12 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
jquery选择器使用详解
2014/04/08 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
浅谈Python traceback的优雅处理
2018/08/31 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
法定代表人身份证明书
2014/09/10 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
倡议书怎么写?
2019/04/11 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers