V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wontoncc
V2EX  ›  Node.js

请问用 Node 的爬虫朋友,有遇到过偶然出现中文变成方块问号字符的情况吗?

  •  
  •   wontoncc · 2013-05-19 19:14:17 +08:00 · 5694 次点击
    这是一个创建于 4213 天前的主题,其中的信息可能已经有所发展或是发生改变。
    估计是变成坏掉的不完整的UTF-8字符了,求解决方案。

    另外,估计不是编码问题,因为出现问题的字符是随机的,并不固定。
    第 1 条附言  ·  2013-05-20 22:28:23 +08:00
    https://github.com/wontoncc/cnbetaCC 代码仓库在这边,主要是 worker 和 processor 做爬取信息的处理。
    第 2 条附言  ·  2013-05-21 16:49:07 +08:00
    重新写了一遍抓取的代码,用 stream 和原生 buffer 处理,并没有出现这个问题;
    估计是 bufferhelper 模块的问题:https://github.com/JacksonTian/bufferhelper
    有点可笑的是,bufferhelper 这个模块本身就是为了防止 chunk 拼接的时候被阶段的问题…

    我自己的处理方案是:
    var buf = Buffer(0);
    ...
    res.on('data', function(chunk){ ... buf = Buffer.concat([buf,chunk]); ... });
    res.on('end', function(){ ... buf = Buffer(0); });

    于是这贴可以结了,感谢各位的指教。
    15 条回复    1970-01-01 08:00:00 +08:00
    chemzqm
        1
    chemzqm  
       2013-05-19 19:30:26 +08:00   ❤️ 1
    可能抓到的是gzip版本,设置请求头 Accept-Encoding:deflate
    wontoncc
        2
    wontoncc  
    OP
       2013-05-19 19:54:14 +08:00
    @chemzqm 刚刚测试了一下,还是不行。会不会跟用了 iconv-lite 转码有关?
    orzfly
        3
    orzfly  
       2013-05-19 19:59:23 +08:00   ❤️ 1
    随机的?话说js好像不支持0~0xFFFF之外的字符。
    inaction
        4
    inaction  
       2013-05-19 20:55:38 +08:00 via Android   ❤️ 1
    @wontoncc 对,有些字符没对应,比如 []
    inaction
        5
    inaction  
       2013-05-19 21:02:15 +08:00
    测试:刚才明明发的中文字符:〖〗,变成了[]
    skydiver
        6
    skydiver  
       2013-05-19 21:04:37 +08:00
    @inaction v2ex确实会转化这个字符。。。不知是不是L大不喜欢这个符号。。。
    wontoncc
        7
    wontoncc  
    OP
       2013-05-19 22:24:32 +08:00
    @inaction
    @orzfly

    那请问还有什么处理GBK的方法?
    juicy
        8
    juicy  
       2013-05-20 14:39:27 +08:00   ❤️ 1
    会不会是你本机缺少相应的字符库,而抓到的数据本身是没问题的?也许在其他有相应字符库的机子上是显示正常的?
    wontoncc
        9
    wontoncc  
    OP
       2013-05-20 16:14:02 +08:00
    @juicy 刚刚测试了一下,并不是这个问题。
    而且因为是随机的缘故,本来有些字这次请求完好,下一次请求却坏到了。如果是字库问题应该一直都看不到才对。
    juicy
        10
    juicy  
       2013-05-20 20:41:07 +08:00
    @wontoncc 那会不会是源头就是坏的呢。。。没准用别的语言爬也是这样的结果。。
    leafduo
        11
    leafduo  
       2013-05-20 21:10:03 +08:00   ❤️ 1
    贴代码吧
    wontoncc
        12
    wontoncc  
    OP
       2013-05-20 22:28:43 +08:00
    @leafduo 已经附上了。
    wontoncc
        13
    wontoncc  
    OP
       2013-05-21 16:50:58 +08:00
    @chemzqm
    @orzfly
    @inaction
    @juicy
    @leafduo

    非常感谢各位,问题已经解决了。请见 APPEND。
    juicy
        14
    juicy  
       2013-05-21 18:18:14 +08:00
    恭喜楼主攻克难题~~~
    chemzqm
        15
    chemzqm  
       2013-05-21 20:42:34 +08:00
    给他提个issue吧,方便其他人。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:16 · PVG 17:16 · LAX 01:16 · JFK 04:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.