cheerio搭配axios采集数据
时间:2018-06-06 03:44:15 +0800 CST 浏览:1566

cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种Web爬虫程序。

axios自动重试 设置->传送门

简单实现

cheerio采集数据还是很简单的,会玩jQuery,就会cheerio。好了废话不多说,直接上代码。

var axios = require('axios');
var cheerio = require('cheerio')

axios.get('https://zhangge.net/5136.html', {
        retry: 5,
        retryDelay: 1000,
        timeout: 6000
    })
    .then(function (res) {
        // 获取网页数据
        var $ = cheerio.load(res.data, {
            decodeEntities: false
        });
        // 获取标题
        var title = $('.entry-title a').text();
        // 获取文章内容
        var content = $('.single-content').html();
        console.log(title, content);
    })
    .catch(function (err) {
        console.log('failed', err);
    });

下载图片

var axios = require('axios');
var cheerio = require('cheerio');
var fs = require('fs');
var url = require('url');
var path = require('path');


axios.get('https://zhangge.net/5136.html', {
        retry: 5,
        retryDelay: 1000,
        timeout: 6000
    })
    .then(function (res) {
        // 获取网页数据
        var $ = cheerio.load(res.data, {
            decodeEntities: false
        });
        // 获取标题
        var title = $('.entry-title a').text();

        //下载图片
        $('.single-content img').each(function (item) {
            var img = $(this);
            // 由于图片的地址是"//"开头我们需要加上具体的协议才能请求
            var imgUrl = 'http:' + img.attr('src');
            // 获取文件名
            var savePath = path.basename(url.parse(imgUrl).pathname)
            // 替换img图片路径
            img.attr('src', savePath);
            // 下载图片
            axios.get(imgUrl, {
                    retry: 5,
                    retryDelay: 1000,
                    timeout: 6000,
                    responseType: 'stream', // 下载文件需要加上这个配置  不然在使用res.data.pipe会报错
                })
                .then(function (res) {
                    res.data.pipe(fs.createWriteStream(savePath));
                });
        });

        // 获取文章内容
        var content = $('.single-content').html();
        console.log(title, content);
    })
    .catch(function (err) {
        console.log('failed', err);
    });

其他下载附件什么的都和下载图片是一个道理,就不详细的演示了。



如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧