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使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs个人博客开发第六步 数据分页
Apr 12 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs中解决异步嵌套循环和循环嵌套异步的问题
Jul 12 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP 与 UTF-8 的最佳实践详细介绍
2017/01/04 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
php实现文件上传基本验证
2020/03/04 PHP
JQuery中getJSON的使用方法
2010/12/13 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
快速排序的四种python实现(推荐)
2019/04/03 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
《梅兰芳学艺》教学反思
2014/02/24 职场文书
环境工程专业自荐信
2014/03/03 职场文书
七夕活动策划方案
2014/08/16 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
MySQL系列之十二 备份与恢复
2021/07/02 MySQL