写了个爬虫脚本,专门爬取豆瓣小组热门贴中的图片 - CNode技术社区

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

下面贴上我的代码

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](//static.cnodejs.org/FuI1gP57Y8Vwzz6uXA6EuWI4Q2Oc)
附上git: https://github.com/Gavinchen92/fetch_hupu_photos.git
另:
	有杭州的团队有招前端的吗?? 
	有杭州的团队有招前端的吗?? 
	有杭州的团队有招前端的吗?? 
	重要的事说三遍。。。
	一年工作经验,非科班出身,会es6 , react, webpack, gulp, 配过eslint不知道算不算,会用git(不太熟练)
	希望能到一个对技术持有开放态度的团队,而不只是业务驱动
3 回复

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

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

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

回到顶部

AltStyle によって変換されたページ (->オリジナル) /