写了个爬虫脚本,专门爬取豆瓣小组热门贴中的图片
下面贴上我的代码
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了