zoukankan      html  css  js  c++  java
  • Nodejs 爬虫简单编写

    nodejs 爬虫原理,先用request请求页面内容,把内容获取到并iconv-lite设置编码格式,再用cheerio进行类似dom操作合并内容,转换写入文件中

    1)获取单页面数据:

    var fs = require('fs')
    var request = require('request')
    var iconvLite = require('iconv-lite')
    var cheerio = require('cheerio')
    
    //请求
    request({
        url:'https://github.com/Zion0707', //要抓取的页面
        encoding:null
    },function(err,res,body){
        //设置编码格式
        var html = iconvLite.decode(body,'utf8')
        //转换成dom操作
        var $ = cheerio.load(html)
        //类似jq操作
        var title = $('title').text(); 
        var json = {
            title : title
        }
    
        //转成json字符串对象写入到文件中
        var r = JSON.stringify(json)
        fs.open('./data.json','w',function(err,el){
            fs.write(el , r ,function(err,suc){
                console.log(suc,'success')
            })
        })
    
    })

    2)批量获取多页面数据:

    var fs = require('fs')
    var async = require('async')
    var request = require('request')
    var iconvLite = require('iconv-lite')
    var cheerio = require('cheerio')
    
    //获取更多url组成数组
    function getMore(num){
        var arr = []
        for(var i = 0 ; i < num ; i++ ){
            arr.push( 'http://www.techweb.com.cn/tele/2017-02-23/2491253_'+(i+1)+'.shtml' )
        }
        return arr;
    }
    //异步每一次获取3条,防止ip被封
    async.mapLimit( getMore(7) , 3 ,function(url,callback){
        request({
            url:url, //读取数组里的每一条url
            encoding:null
        },function(err,res,body){
    
            var html = iconvLite.decode(body,'utf8')
            var $ = cheerio.load(html)
            //获取每一页的一张图片
            var result = $('img').eq(1).attr('src')
            //成功之后callback 才能进行下一次获取
            callback( null , url+result )
    
        })
    },function(err,result){
        //返回结果
        console.log(result)
    })
  • 相关阅读:
    原生js实现基本选择器
    javascript数组
    web中关于隐藏与显示
    CSS3 box-shadow(阴影使用)
    java中文件的I/O操作
    组件RecyclerView的应用(一)
    Android客户端与Eclipse服务器端的Socket通信
    C语言关于利用sscanf实现字符串相加减
    TabLayout和ViewPager简单实现页卡的滑动
    DrawerLayout的openDrawer()和closeDrawer()方法
  • 原文地址:https://www.cnblogs.com/zion0707/p/6936103.html
Copyright © 2011-2022 走看看