写了个爬虫脚本,专门爬取豆瓣小组热门贴中的图片
发布于 8 个月前 作者 Gavinchen92 801 次浏览 来自 分享

下面贴上我的代码

const fs = require(‘fs’); const superagent = require(‘superagent’); const cheerio = require(‘cheerio’); const async = require(‘async’); const rimraf = require(‘rimraf’);

const indexPage = ‘https://www.douban.com/group/haixiuzu/?type=essence#topics’; const dir = ‘./haixiuzu’;

superagent .get(indexPage) .end((err, rs) => { const list = []; const img_url_list = []; const $ = cheerio.load(rs.text); let count = 1;

    // 获取所有帖子
    $('#group-topics td.title a').each((idx, el) => {
        list.push($(el).attr('href'));
    });

    async.eachLimit(list, 10, (url, callback) => {
        superagent
            .get(url)
            .end((err, rs) => {
                console.log(url);
                const $ = cheerio.load(rs.text);

                if (err) {
                    callback(err);
                    return;
                }

                $('#link-report div.topic-figure.cc img').each((idx, el) => {
                    img_url_list.push($(el).attr('src'));
                });

                callback();
            });
    }, (err) => {
        if (err) {
            throw err;
        }

        try {
            // fs.rmdirSync(dir);
            rimraf.sync(dir);

        } catch (e) {} finally {
            fs.mkdirSync(dir);

        }

        async.eachLimit(img_url_list, 10, (url, callback) => {

            let filename;

            try {
                filename = /public\/([\S\s]+)$/i.exec(url)[1];
                console.log(filename);
            } catch (e) {
                callback(e);
                return;
            }

            superagent
                .get(url)
                .pipe(fs.createWriteStream(dir + '/' + filename).on('finish', () => {
                    callback();
                }));

        }, (err) => {
            if (err) {
                throw err;
            }

            console.log('所有图片爬取完成!');
        });
    });
});

在杭州做前端,利用下班时间学了nodejs玩玩, 全是异步进程,我也是有点懵逼。
还有callback hell 问题, 多层嵌套让人头疼, 想了想应该用 .emit(event) 能缓解
下面贴上战果
![2017-03-03 23-51-36屏幕截图.png](//dn-cnode.qbox.me/FuI1gP57Y8Vwzz6uXA6EuWI4Q2Oc)

附上git: https://github.com/Gavinchen92/fetch_hupu_photos.git

另:
	有杭州的团队有招前端的吗?? 
	有杭州的团队有招前端的吗?? 
	有杭州的团队有招前端的吗?? 
	重要的事说三遍。。。
	一年工作经验,非科班出身,会es6 , react, webpack, gulp, 配过eslint不知道算不算,会用git(不太熟练)
	希望能到一个对技术持有开放态度的团队,而不只是业务驱动
3 回复

第一次发帖不知道怎么贴图片。。。囧

我写过一版美子图的. 但发现node 用request或superagent都会有些图片下载不全的问题.

@ystyle 用request出了点问题改用superagent了

回到顶部