位置: 编程技术 - 正文

详解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爬虫)

  • 期末有留底税额可需要进行账务处理
  • 带薪休假会计
  • 留抵退税手续
  • 运费增值税税率有5吗
  • 捐赠劳务支出可在企业所得税前扣除吗
  • 贷方账户日累计金额超限怎么办
  • 两处工资薪金所得
  • 原材料加工成产品的会计分录
  • 维修费开发票选择什么税收分类编码
  • 实收资本印花税税率
  • 虚开增值税发票的涉税风险如何防范
  • 公司开承兑需要多长时间
  • 冲销上月收入
  • 溢价发行的债券,当债券临近到期日时,债券价格
  • 设备折旧后的价值
  • 营业执照的注册地址怎么填
  • 建筑企业如何申请高新技术企业
  • 会务费发票税率是
  • 小区物业费开票名称
  • 营改增文件2019
  • 公司租车费用会计分录
  • 企业法人不发工资合法吗
  • 记账公司如何平衡收入成本费用?
  • 赠票视同销售,借方计入什么科目?
  • 企业打款认证计入什么科目
  • windows10.0
  • mac u盘
  • 服务外包企业
  • PHP:xml_set_start_namespace_decl_handler()的用法_XML解析器函数
  • MAC OS X 10.12.5 beta 4怎么升级 OS X 10.12.5 beta 4升级图文教程
  • 酒店采购布草如何入账
  • php设计思路
  • 单位人工成本计算公式
  • 住房公积金领出来用了影响以后买房贷款吗
  • 固定资产明细账登记
  • 用smart原则改写年底前完善客户资料
  • 资本化的研发费用计入什么科目
  • php post数据
  • 投资收益如何记账
  • 财政零余额账户是什么
  • 长期借款利息是流动负债吗
  • 预收账款什么时候确认增值税
  • 年收入1500万是富人吗
  • 公司境外汇款该怎么处理
  • 费用报销审批单和费用报销单区别
  • sql语句分组汇总
  • 一般纳税人无形资产税率
  • 股票的价格是由什么决定
  • 计提折旧的固定资产全年平均总值怎么算
  • 纳税人具有怎样的特征?
  • 销售商品开票税目
  • 实收资本如何计算印花税及附加税
  • 门市装修费用会计处理
  • 个人独资企业个税怎么交
  • 企业年底亏损怎么结转
  • 融资租赁出租人与承租人之间形成债权债务关系
  • 税务局返还税款账务处理
  • 扣非净利润增长率
  • 员工提前预支工资合法吗
  • 明细分类账怎么打印
  • MySQL利用不同的流程语句输出1到200的和
  • win2008 无线网卡
  • win10ie
  • win7升级win8.1失败
  • linux修改文件权限
  • win10无法回退到以前的版本怎么办
  • windows 8改windows 7
  • android知识
  • 浮动浮动
  • 网页制作颜色搭配
  • 幼儿园放鞭炮
  • jquery的dialog怎么使用
  • cocos2d怎么用
  • jquery设置滚动条
  • 个税申报系统如何增加新单位
  • 电子税务局如何下载财务报表
  • 电子票怎么申领到开票系统
  • 耕地建仓库属于违规
  • 什么是金融企业的固定推销人员
  • 北京社保登记证怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设