• 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)
    })
  • 相关阅读:
    软件工程课程总结
    团队-student_blog-最终程序
    课后作业-阅读任务-阅读提问-3
    课后作业-阅读任务-阅读笔记-3
    《团队-爬虫豆瓣top250项目-团队一阶段互评》
    爬虫豆瓣top250项目-开发文档
    《结对-英文词频统计-结对项目总结》
    JAVA实现最短距离算法之迪杰斯特拉算法
    切词框架jcseg,入门
    本人对于netty框架的一些理解,怎么与网站上的websock建立连接
  • 原文地址:https://www.cnblogs.com/zion0707/p/6936103.html
Copyright © 2020-2023  润新知