位置: 编程技术 - 正文

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

  • 车船税征税范围口诀
  • 财税新闻稿
  • 企业的税务风险研究怎么写
  • 公司老板有钱吗
  • 应收账款平均余额包括应收票据吗
  • 资产负债表的其他应付款怎么填列
  • 增值税怎么纳税比率
  • 行政事业单位拨入经费
  • 调解书和判决书执行力度一样吗
  • 开办生产建设项目
  • 土地转让差额征税开票及申报表填写
  • 采购合同中含税金额
  • 购入原材料没有发票只有入库单
  • 工资一年发一次合法吗
  • 营改增贷款服务包括哪些
  • win10双屏怎么切换屏幕
  • 苹果手机键盘剪切板在哪里打开
  • 关于企业之间资金拆借的法律规定
  • 货物质量赔偿需要改变收入吗合法吗
  • 浅谈linux
  • 记账凭证的编制方法有几种
  • 房地产开发公司组织架构
  • 电脑卡慢咋办
  • 公共基础设施的英语
  • 最小的蓝牙鼠标是哪款
  • 微信小程序登录的账号怎么注销
  • 适合练手的动漫人物
  • 级联选择器 数据回显
  • 期末余额和年初余额为什么不一样
  • html做超链接
  • thinkphp6多表关联查询
  • apr命令怎么用
  • 资产减值损失的大幅度变动
  • canvas实现图片编辑
  • PostgreSQL更新表时时间戳不会自动更新的解决方法
  • Linux下实现MySQL数据备份和恢复的命令使用全攻略
  • 坏账准备抵消期初未分配利润
  • 展会补贴需要准备什么资料
  • 债权投资产生的暂时性差异确认所得税吗
  • 一般纳税人的税负率是多少
  • 金蝶软件如何新增账套
  • sql2005安装方法
  • mysql 中文乱码 识别
  • 永久性差异有哪些项目
  • 累计折旧计提会计分录
  • 残疾人就业保障金是什么意思啊
  • 预缴的增值税在增值税附表四怎么填
  • 转销无法收回的应收账款会计分录
  • 装修费可以一次性入账吗
  • 印花税是根据什么计算的
  • 销售成本包括销项税额吗
  • 小微企业要交残疾证吗
  • 小企业的建账流程
  • 合法有效的凭证是什么
  • mysql日志的作用
  • 备受大家关注的成语
  • win7系统怎么运行xp系统的软件
  • windows自带邮件应用
  • win8 怎么样
  • windows8触摸屏手势设置
  • 电脑windows7打不开怎么办
  • win7资源管理器不停的崩溃重启
  • linux制作
  • addObserver和postNotification函数传递函数的区别
  • 文件上传的三个条件
  • 阿里云一键建站
  • 修改系统用户名为英文
  • 计算字符串的长度的函数
  • python的threadpool
  • unity删除对象
  • 编写高性能代码时以下哪种技术可用于减少内存访问延迟
  • Unity3D游戏开发毕业论文
  • Android 仿 iphone 自定义滚动选择器
  • Android自定义系统服务框架
  • 电子税务局申报表在哪里查询
  • 个税更正申报如何导出大厅申报表
  • 石家庄有线电视客服电话9688
  • 中国税收居民申报
  • 如何做好税务局长
  • 安徽国家税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设