nodeJs单页面所有url地址爬取并保存到本地TXT本文

454 查看

最近学习了慕课网Scott老师的nodeJs教程,实现了一个单页面爬取所有url地址的一个nodeJs小程序(我尝试过用爬取到的url再次循环往下爬,但没有成功,请有经验的小伙伴分享一下思路,谢谢),分享给大家;

测试地址:http://www.360.com/

废话不多说,上代码!

var https = require('https')
var http = require('http')
var fs = require('fs')
var Promise = require('bluebird')
var cheerio = require('cheerio')
var baseUrl = 'http://www.360.com/'   //输入你要查询的URL地址就可获取当前页面的所有连接地址
var html = ''
var temp = ''
var arr = []
var num = 0

    function findUrl(html){
        var $ = cheerio.load(html)
        var href_url_a = $('html').find('a')

        for (var i = 0; i < href_url_a.length; i++) {
            if ($(href_url_a[i]).attr('href') == '' || $(href_url_a[i]).attr('href') == null) {
            }else{
                if ($(href_url_a[i-1]).attr('href') == $(href_url_a[i]).attr('href')) {

                }
                else{
                    var Str = $(href_url_a[i]).attr('href')
                    if (Str.substring(0,4) == 'http') {
                        arr.push($(href_url_a[i]).attr('href'))
                        temp += $(href_url_a[i]).attr('href')+'\n'
                        num++
                    }
                }
            }
        }
        fs.writeFile('url.txt','【抓取到<'+baseUrl+'>页面数: '+num+' 个】:'+'\n'+'\n'+temp,function(err){
            if (err)
                throw err
        })
        console.log('\n'+'||这个页面一共有'+num+'链接.')
    }

    (function web_crawler(url){
        if (url.substring(0,5) == 'https') {
            https.get(url,function(res){
                res.on('data',function(chunk){
                    html += chunk
                    console.log('正在爬取...')
                })
                res.on('end',function(){
                    findUrl(html)
                    console.log('抓取完毕!')
                }).on('error',function(e){
                    console.log('错误访问...')
                })
            })
        }else{
            http.get(url,function(res){
                res.on('data',function(chunk){
                    html += chunk
                    console.log('正在爬取...')
                })
                res.on('end',function(){
                    console.log('抓取完毕!')
                    findUrl(html)
                }).on('error',function(e){
                    console.log('错误访问...')
                })
            })
        }
    })(baseUrl)

效果图:
图片描述

图片描述

代码肯定还有很多不足的地方,希望大家多多指点!