位置: 编程技术 - 正文

详解nodejs爬虫程序解决gbk等中文编码问题(nodejs爬虫技术)

编辑:rootadmin

推荐整理分享详解nodejs爬虫程序解决gbk等中文编码问题(nodejs爬虫技术),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node爬取数据,node网络爬虫,node网络爬虫,node爬取数据,nodejs爬虫教程,nodejs爬虫教程,node js爬虫,nodejs爬虫框架crawler,内容如对您有帮助,希望把文章链接给更多的朋友!

使用nodejs写了一个爬虫的demo,目的是提取网页的title部分。

遇到最大的问题就是网页的编码与nodejs默认编码不一致造成的乱码问题。nodejs支持utf8, ucs2, ascii, binary, base, hex等编码方式,但是对于汉语言来说编码主要分为三种,utf-8,gb,gbk。这里面gbk是完全兼容gb的,因此在处理编码的时候主要就分为utf-8以及gbk两大类。(这是在没有考虑到其他国家的编码情况,比如日本的Shift_JIS编码等,同时这里这个iconv-lite模块支持的编码方法有限)。

首先说一下浏览器显示网页内容的时候是如何处理编码问题的。服务器和客户端进行通信,服务端将网页按照指定的编码方式(比如gbk)编码成为二进制码流(即我们使用wireshark抓包看到额进制码流)传送给我们的客户端。客户端则会根据网页源码中所规定的编码方式,由浏览器调用对应的解码器,将二进制码流解码后显示出来。而编码方式通常在网页中是如下内容表示:

或者

详解nodejs爬虫程序解决gbk等中文编码问题(nodejs爬虫技术)

如果客户端是nodejs爬虫请求程序,由于nodejs默认的编码方式是utf-8,因此爬虫程序将接收到的二进制码流以字符串(默认方式utf-8)显示的时候则会显示乱码。这个时候需要将原始的二进制码流按照网页原来的编码方式解码,则不会出现乱码。

因此解决方法如下:

将接收到的网页源码以二进制的方式存储下来,处理二进制数据流使用Buffer全局对象。

然后对这些二进制的数据调用对应的解码程序。iconv-lite模块用于解码,cheerio模块用于解析网页内容。

上述bufferHtmlData为二进制码流,decodeHtmlData为将二进制码流通过gbk编码规则转换为unicode编码对应的数字(即usc2字节流),然后在转换为对应的字符串。下述为iconv-lite源码中解码部分,地址在这里:

可以看到最终返回的是newBuf.toString(‘ucs2')字符串。

爬虫程序源码如下:

标签: nodejs爬虫技术

本文链接地址:https://www.jiuchutong.com/biancheng/377918.html 转载请保留说明!

上一篇:Node.js之网络通讯模块实现浅析(node.js网站)

下一篇:nodejs爬虫遇到的乱码问题汇总(nodejs爬虫 与python爬虫)

  • 如何开具免税发票
  • 小规模纳税人企业所得税计算
  • 关税完税价格是到岸价吗
  • 手机上税票怎么开
  • 收到税务局退款怎么做分录
  • 进销存工作流程
  • 个人所得税孩子小学升初中要修改吗?
  • 增票未抵扣丢失怎么处理
  • 账户利息怎么做账务处理
  • 横幅属于什么发票范围
  • 话费充值发票可以入账吗
  • 个税系统异常怎么申报
  • 小型企业利润表
  • 购房契税应该交给谁
  • 抵扣增值税怎么抵扣
  • 转账支票支付购货款填制什么凭证
  • 安装设备领用自产产品按成本还是计税价格
  • 未支付商标使用费怎么办
  • 怎么处理未抵扣增值税形成的留抵税额?
  • 增值税发票常见问题
  • 待摊费用是
  • 租赁公司运输费计入什么科目
  • 银行余额调节表模板
  • 小规模纳税人差额征税
  • 顺丰的收派服务费可以抵扣吗
  • 小规模纳税人开票额度
  • 总资产增长率的含义
  • 承兑跨省是不是不能用
  • 自己生产的水泥用于建造厂房
  • 预付账款如何计提折旧
  • 当月支付的费用需要计提吗
  • 百货商场会计账怎么做
  • 股东借款作为项目资本金
  • vue使用技巧
  • yolov5训练参数说明
  • php framework框架
  • 办公室清洁费计算公式
  • 显示已申报未导入
  • 销售旧货怎么填写申报表
  • 计提的坏账准备计入什么科目
  • Python函数怎么返回
  • phpcms2008
  • 国际货运代理一个月大概有多少收入
  • linux安装ms
  • 买车哪些费用可以计入固定资产
  • 小规模纳税人增值税计算公式
  • 货物已到发票未开具
  • 本年利润总额是什么
  • 不用交社保的几种情况
  • 合同约定合同期限自动顺延
  • 其他非流动资产减少的原因
  • 预收工程款怎么做账
  • 未交增值税科目怎么用
  • 二手市场机械设备
  • 买材料含税价怎么算
  • 递延所得税资产和负债怎么理解
  • 暂估成本估多了怎么办
  • 股东 退股
  • 主营业务成本和其他业务成本区别
  • 电子承兑非拒付会怎么样
  • 明细账的作用
  • mysql8.0二进制安装
  • fcitx输入法配置
  • 笔记本xp系统怎么升级win7系统
  • service.exe是什么
  • mac休眠怎么设置
  • 批处理语言 从入门到精通
  • jquery判断值是否为空
  • python中的range和arange
  • ndk调用so
  • Qt for Android - ANT_HOME is set incorrectly or ant could not be located
  • javascript七种数据类型
  • ios反编译源代码
  • Windows上使用PD虚拟机
  • 药店买药开票吗
  • 如何登录黑龙江全省事
  • 江西电子税局
  • 烟叶税的意义和感悟
  • 告知承诺和非告知承诺
  • 法治税务示范基地枫桥
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设