位置: 编程技术 - 正文

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

  • 主营业务收入净额在利润表里怎么看
  • 季度利息分录
  • 职工教育经费中其他费用包括
  • 住宿报销是开普票还是专票
  • 二级分支机构不具有主体生产经营职能
  • 旅游服务小规模差额征税申报表怎么填
  • 运输费增值税专用发票几个点
  • 年报财务报表在哪里申报
  • 公司为其他企业提供担保,担保对象可以是公司股东吗
  • 税务登记证注销证明
  • 企业弥补亏损的三个途径
  • 材料检测费怎么计算
  • 未结清全额是逾期吗
  • 酒店收入简易征收会计核算是怎样的?
  • 运输发票上的印章怎么弄
  • 税种申报表样表
  • 企业自产自用需要交增值税吗
  • 0申报逾期罚款
  • 没有发票的业务财务能挂帐吗
  • 调整期初数怎么做会计分录
  • 抵债资产会计核算办法
  • 收到退还的工会经费进什么科目
  • linux中!
  • 清空收藏夹里面的歌曲
  • 金融服务的手续费要交税吗
  • win11咋截屏
  • php模块
  • php+mysql项目实战教程
  • 默认网关不可用怎么修复
  • 鸿蒙系统如何自定义图标
  • 黑枣的功效与作用图片
  • 营业外收入不计入所有者权益吗
  • 计提工会经费会计账务处理
  • php验证终端类型是什么
  • jsonp解决跨域问题spring3.0
  • 销售赔偿款增值税和所得税
  • yolov5 output
  • 气温和降水空间变化一月平均气温规律是什么原因是什么
  • mess指令
  • 产品补发原来的要退吗
  • 可供出售金融资产的会计处理
  • 建筑企业增值税收入确认时间
  • 存根联是自己留着吗
  • wordpress图片大小设置
  • 新建账簿的具体步骤
  • 保证人不承担责任的情形(上)
  • 购买项目用设备计入什么科目
  • 货先到发票后到怎么办
  • 费用类科目期末余额
  • 企业利润怎么提取出来
  • 员工意外伤害险入什么会计科目
  • 固定资产资本化后续支出
  • 处理废旧材料会计分录
  • 预收租金发票怎么开
  • 工会疗养费用怎么做账
  • 更新改造过程中的固定资产需要计提折旧吗
  • 商品的结构
  • 开公司合理避税的方法
  • 分支机构企业所得税计提和缴纳数额不一致怎么办?
  • 哪些发票可以报销哪些发票不可以报销
  • 营业费用包括哪些?
  • 投资其他公司做什么科目
  • 实收资本实际缴纳要去税务局备案吗
  • 个人独资企业要报税吗
  • mysql分页时offset过大的Sql优化经验分享
  • sql无法用sql身份验证
  • ubuntu 挂载iso文件
  • Win7/Win8/Win10单、多系统一键安装教程 只需30秒!
  • 比较常见的别墅户型
  • win10预览版最新
  • linux系统中
  • certutil - decode/encode BASE64/HEX strings.Print symbols by HEX code
  • centos7如何分区
  • js tabs
  • Unity for Absolute Beginners(三)
  • unity2d摇杆
  • JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
  • 农产品进项税额核定扣除办法
  • 中国涉农金融体系包括哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设