位置: 编程技术 - 正文

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

  • 先发表还是先出版
  • 专用发票超过360天认证期怎么办?
  • 预算收入包括增值税吗
  • 发票的收款人复核怎么写
  • 租房违约金怎么计算,怎么写
  • 支付宝已经支付的钱怎么退回来
  • 免税商品销售要缴税吗
  • 股权转让收入需要缴纳什么税
  • 非居民企业间接转让股权案例
  • 房地产企业暂估成本
  • 广告设计制作的技术框架
  • 外籍人士享受满五唯一吗
  • 销项负数票需要把之前的票退回吗
  • 超过三年的坏帐损失税前扣除怎样规定?
  • 累计结转是什么意思
  • 出租固定资产收取租金
  • 工会经费的计税依据包括单位社保吗
  • 滴滴发票开公司名称可以抵扣进项吗
  • 政府会计制度新旧衔接图
  • 在建工程的二级明细的讲解
  • linux device drivers
  • php ftp管理系统
  • php text
  • 结转已销产品实收成本
  • 银行本票结算的特点是什么
  • 用php做计算
  • 建设期需要流动资金吗
  • 银行存款账面余额与银行账户余额
  • 小规模纳税人税额怎么算
  • vue面试题及答案2021
  • 回迁房会被收回吗
  • 出差住宿费会计分录怎么做
  • 分享2款CSS3母亲节主题寄语文字动画特效
  • php生成zip压缩包
  • emerge命令
  • 管家婆系统能否查询上月库存明细
  • sqlserver2005使用
  • 公司股东的权利和义务有哪些
  • mysql5.5远程连接
  • mysql怎么替换某个值
  • sql server使用sql server身份登录
  • 应收应付会计分录大全
  • 未开票收入怎么申报增值税
  • 货款去零头分录
  • 技术服务收入包括哪些
  • 广告设计合同属于什么合同
  • 多交税款账务怎么处理
  • 物业公司收取电费服务费
  • 去年多摊销了怎么办
  • 快递费属于办公费吗
  • 研发费用加计扣除的条件
  • 股权转让的会计分录
  • 计提有哪些科目
  • 投标保证金退回是不是没中标
  • 房地产会计核算科目
  • 在sql中执行一个创建数据表的脚本文件
  • sqlserver连接到服务器
  • windows安装设置
  • 方正电脑升级
  • 虚拟机怎么安装VMware Tools
  • win10预览版21277下载
  • win10 1607更新失败
  • win7系统打不开网络和共享中心
  • win8.1 win7
  • sessmgr.exe - sessmgr是什么进程 有什么用
  • 怎么判断电脑windows几
  • linux ifconfig命令详解
  • win8系统修复在哪里
  • js前端导出word
  • mongo 安装
  • 我为什么要
  • unity3D游戏开发
  • node.js 开发工具
  • unity3ds
  • 卷票真伪查询系统国税
  • 税务分局是什么意思
  • 美国消费比例
  • 税务局营改增文件
  • 开票系统功能
  • 劳务派遣工为什么没年假了
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设