• node.js 爬虫


    node写爬虫真的很不错,node天生异步,把这写异步的都省了。

    前几天项目需要,求爬了点易迅网的评价。

    先在http://item.51buy.com/item-{id}.html

    上面获取物品名称,主要就是title

    然后获取评价的分布 http://item.51buy.com/json.php?mod=review&act=getproperty&jsontype=str&pid=id

    最后在http://item.51buy.com/json.php?mod=review&act=getreviews&jsontype=str&type=allreview&page=page&&pid=id获取该商品的评价

    还有,就是在item页面,我们需要的只是title,而整个页面有6w多字节的样子,简直就是浪费嘛。

    看看HTTP header里面有个Range参数,可以请求只读一段,那就大大的节约了带宽。

    var options = {
            host : 'item.51buy.com' , 
            port : '80' ,
            path : '/item-' + i + '.html' , 
            headers : {'Range' : 'bytes=0-500'}
        };
    

    这样,就只要0-500这几个bytes

      http.get(options , function(res){
           // console.log(res.headers);
            res.setEncoding('binary');
            var data = '';
            res.on('data' , function(d){
                data += d;
            });
            res.on('end' , function(){
                if(data.length > 0)
                {
                    parse(data , i);
                }
            });
        }).on('error' , function(err){
            console.log(i+' ' +err);
        });

    获取tile后我们一步一步的来嘛。

    都差不多的,主要就是用http.get...

    然后写成cps的形式,因为Node是异步的-,-

    不得不吐槽下,易讯有些页面是utf8编码有些又是gbk

    很是蛋疼。

    我只是简单的处理了下,先用gbk去解码,然后获取title的时候正则能匹配出来那么就是gbk了,

    如果不是那么就换utf8,要是还不行,那我放弃这个页面。

    转编码用了iconv-lite , 因为iconv在windows下面总是没编译过。

    最后写入数据库就ok了。

    其实node做爬虫真的很方便,还能解析JS。

    by 1957
  • 相关阅读:
    单链表反转的2种常见方法
    LeetCode解题报告:Reorder List
    LeetCode解题报告:Binary Tree Postorder Traversal
    LeetCode解题报告:LRU Cache
    LeetCode解题报告:Insertion Sort List
    Java编程杂记
    如何对一个不断更新的HashMap进行排序
    Python快速入门
    Html与CSS快速入门01-基础概念
    JVM快速入门
  • 原文地址:https://www.cnblogs.com/x1957/p/3003633.html
Copyright © 2020-2023  润新知