位置: 编程技术 - 正文

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

  • 增值税专用发票有效期是多长时间
  • 小规模纳税人开专票需要交税吗
  • 取得不动产权证书时间是指哪个时间
  • 员工补充医疗保险报销范围
  • 新开商贸公司怎么做账和报税
  • 关税滞纳金会计怎么做账
  • 进项税认证怎么做分录
  • 企业的固定资产因自然灾害产生的净损失应计入哪里
  • 为什么要抵消损益
  • 个人借公司款利率多少合法
  • 报价需要提供哪些资料
  • 如何开具红字增值发票
  • 工资报税怎么报的原则
  • 给货代付海运费手续费怎么算
  • 工伤后辞职了还可以报工伤
  • 单位汽车按揭贷款怎么贷
  • 土地开垦费怎么征收
  • 短期借款利息的处理
  • 简易计税分包款进项税可以抵扣吗
  • 个人车辆租给公司有什么后果
  • linux强制删除文件夹
  • 普通发票用记账吗
  • 监事会职权范围是什么
  • 费用发票可以抵扣吗
  • vue前端代码实例
  • 员工奖励股权
  • PHP:ftp_rename()的用法_FTP函数
  • PHP:curl_share_setopt()的用法_cURL函数
  • php的array_multisort()使用方法介绍
  • 一次补发工资怎么算
  • php激活码永久
  • 对外支付代扣代缴附加税享受减免吗
  • 微信php开发教程
  • 报税扣款锁定怎么处理
  • 长期负债和应付账款
  • 【深度学习】datasets.ImageFolder 使用方法
  • vue有哪些方法
  • Vite4+Pinia2+vue-router4+ElmentPlus搭建Vue3项目(组件、图标等按需引入)[保姆级]
  • 印花税是不是每个月都要交
  • 职工福利费的范围有哪些
  • 普票3个点可以抵扣吗
  • python 进程管理
  • 织梦安装步骤
  • 帝国cms获取当日发布的url链接
  • 不同单位发的劳务费会收税吗
  • 长期无法收回的应收账款如何处理
  • 停工损失会计科目
  • 向个体工商户付款可以转给个体法人吗
  • 分公司民事责任由谁承担
  • mysql的左右连接
  • 应收账款账龄计提坏账比例
  • 使用银行汇票的结算方式
  • 营业外收入月末怎么处理
  • 现金日记账需要日清月结吗
  • 进项税额转出科目编码
  • Linux下mysql 5.6.17 安装图文教程
  • mysql数据库技术介绍
  • centos清理磁盘空间
  • win8.1 下载
  • linux改变
  • awk正则表达式中引入变量
  • win80x0000007b修复
  • centos 发行版
  • linux必不可少的分区
  • 如何注销windows账户登录
  • 软件生态圈是什意思
  • linux的命令行界面
  • 置顶如何设置固定顺序
  • jquery实战
  • js 修改 css
  • jquery给表单赋值
  • android navigation bar
  • js中的eval
  • 安装配置jsp运行环境
  • 重庆市委常委是副部级干部吗?
  • 美容行业增值税率是多少
  • 国家税务总局广州市税务局
  • 上海市信访局官网首页
  • 房产税是按套还是按套
  • 上海疫情租房金额怎么算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设