位置: 编程技术 - 正文

详解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右键没有打印
  • 工程服务的采购合同范本
  • mac上读取ntfs
  • php字符串定义
  • php字符串函数有哪些
  • php中实现文件上传的函数是什么
  • php数据库编程
  • 技术和商业模式怎么写
  • 农村土地承包经营权流转合同
  • 销售自用的小汽车赚钱吗
  • 购买加油卡如何做会计分录
  • mysql内存使用详解
  • mongodb win7
  • mongodb主备
  • 税额不够什么意思
  • sqlserver控制台
  • 普通费用发票不入账会有什么后果吗
  • 公司购车需要什么材料
  • 个人独资企业需要会计做账吗
  • 固定资产一次性计入费用的账务处理
  • 收到银行电子汇票已入账怎么做账
  • 验资报告费用如何做账
  • 工程分包如何开具发票
  • 入账价值有
  • 研发支出的会计处理原则
  • 可供出售金融资产和交易性金融资产
  • 金税盘技术维护费可以不交吗
  • 旅游费的发票可以进成本吗?
  • 一般纳税人哪些项目可以简易征收
  • 股东增资有哪几种方法
  • 建账时应取得哪些资料
  • mysql联合索引生效原则
  • mysql转移表数据表
  • winxp电脑显示器亮度怎么调
  • win10预览版退回正式版
  • linux设置时间日期
  • fedora os
  • mac可以远程连接windows吗
  • linux which ls
  • 如何快速卸载游戏
  • xp系统电源设置在哪里
  • pascl32.exe - pascl32是什么进程 有什么用
  • win8怎么更改密码
  • linux中怎么在文件中添加内容
  • win10系统如何解除屏保
  • Intermediate Unity 3D for iOS: Part 1/3
  • bat ping批处理
  • python2与python3中的区别
  • linux安装unixodbc
  • bootstrap怎么学
  • angular jsx
  • jquery json对象
  • 基于jquery的移动端ui框架
  • jquery获取cookie值的方法
  • 企业所得税减按90%计入收入总额
  • 工会代扣代缴个税怎么申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设