位置: 编程技术 - 正文

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

  • 拍卖公司没开发票违法吗
  • 企业所得税相关分录
  • 公司的货款直接到账吗
  • u8已记账怎么修改年初余额
  • 企业专家咨询费标准
  • 企业接收捐赠的会计分录
  • 资产负债表的日期可以是1月1日吗
  • 个人非专利技术转让属于什么收入
  • 融资租赁咨询服务合同需要交印花税吗
  • 自产自销免税物品包括哪些
  • 非正常原因导致的存货盘亏或毁损非正常原因是哪些
  • 润滑油经销需要什么资质
  • 逃税漏税不用坐牢吗
  • 什么样的凭证是原始凭证
  • 专用发票密码区显示数电票号码
  • 房地产企业什么时候交企业所得税
  • 既加工又有安装费的公司
  • 会计调账必须写说明吗
  • 疏通下水道入什么经络
  • 利润弥补亏损如何处理
  • 增值税进项税额抵扣期限最新
  • 华为手机屏幕变成黑白怎么调回来
  • win11怎么取消开机启动项
  • 存货监盘计划要求,在对存货盘点结果进行测试时
  • 利润表中哪些属于营业外收入
  • 缴纳印花税怎么算
  • 微软输入法打不出汉字
  • 苹果怎么设置屏保和壁纸
  • 其他综合收益属于什么类
  • 拍卖获得收入个税
  • win10任务栏还原到下边
  • 提坏账准备的调整分录
  • 培养自己的php编程能力
  • 收到银行承兑汇票会计分录
  • 公司向股东借的钱怎么还
  • win10iis安装配置
  • 小说《从零开始》
  • 高校教材编写
  • 会计制度备案附件要上传什么
  • 上年度会计凭证怎么填写
  • discuz发帖标签
  • micro start
  • 小微企业应具备的条件
  • 信息采集是哪个部门负责
  • 税前弥补以前年度亏损对递延所得税影响
  • mysql的环境配置
  • 个人缴纳税是什么意思
  • 赠送给客户的商品是否要计入费用?
  • 定期定额征收和查账征收的区别
  • 租金收入会计科目
  • 产品成本核算的方法
  • 现金余额出现负数的原因
  • 增值税及附加税计算公式
  • 预付款开了发票
  • 什么情况下需要缴纳
  • 工程施工怎么结转,用友自动结转吗
  • 研发支出主要包括
  • mysql osc
  • iis支持什么后端语言
  • windows8自动更新在哪里关闭
  • WIN7系统怎么删除UG其它版本的许可证
  • mac修改dns设置
  • win10怎么旋转屏幕
  • canvas的使用步骤
  • jquery插件怎么用到自己的网站
  • js如何获取url
  • 自定义仪表盘的价值
  • jquery.css
  • fragment detach
  • nodejs详解
  • Node.js+Express+MySql实现用户登录注册功能
  • jquery 设置css
  • javascript类定义
  • 深入理解新发展理念,推进供给侧结构性改革 心得体会
  • 企业医院和事业医院的区别
  • 国家税务总局河北地税局
  • 地税局属于市直单位吗
  • 广东省电子税务局app下载官网
  • 个人所得税怎么申报
  • 无纸化同义词
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设