nodejs抓取https://themeforest.net网页

news/2024/11/8 9:06:31/

为什么80%的码农都做不了架构师?>>>   hot3.png

使用nodejs抓取 https://themeforest.net 网页模版预览放入mongoose。

以后找模版就不用那么费劲了,我是太懒了。。。

执行图片:

代码:

var request = require('request');
var cheerio = require('cheerio');
var mongoose = require('mongoose');var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/theme');
var Theme = new Schema({text: String,url: String,img: String
});
var ThemeModel = mongoose.model('Themes', Theme);
var urlPrefix = 'https://themeforest.net/';
var baseUrl = 'https://themeforest.net/category/site-templates/creative?page=';
var currentPage = 1;
var countPage = 60; // 抓取网页总页数
//延时
var itemCount = 0;
var itemLoad = 0;function getPageList(page) {if (page > countPage) {console.log('所有数据加载完毕!');process.exit(0);}console.log(`当前加载第 ${page} 页数据`);request(baseUrl + page, function(err, response, body) {if (!err && response.statusCode == 200) {analysisPage(body);} else {console.log('get page error url => ' + baseUrl + page, err);}});
}
getPageList(currentPage);function analysisPage(body) {var items;var url;var $ = cheerio.load(body);// 抽出列表 liitems = $('.js-google-analytics__list-event-container');itemCount = items.length;items.map(function(i, item) {item = $(item);var linkA = item.find('.js-google-analytics__list-event-trigger.t-link');var text = linkA.text();var url = linkA.attr('href');var img = item.find('.landscape-image-magnifier').attr('data-preview-url');saveFile(urlPrefix + url,text,img);});
}function saveFile(url, text, img) {var theme = new ThemeModel({url: url,text: text,img: img});theme.save(function(err) {if (err) {console.log('save mongoose err! ');} else {itemLoad++;if (itemLoad === itemCount) {// 已保存完数据清空当前加载数itemLoad = 0;getPageList(++currentPage);}}});
}

package.json

{"name": "theme","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","dependencies": {"cheerio": "^0.22.0","mongoose": "^4.7.0","request": "^2.79.0"}
}

更新一个前端查看页面:

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var Schema = mongoose.Schema;var Theme = new Schema({text: String,url: String,img: String
});
var ThemeModel = mongoose.model('Themes', Theme);
var html = `
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>themes</title>
</head>
<body>
%{body}
</body>
</html>
`;mongoose.connect('mongodb://localhost/theme');
app.get('/', function(req, res) {var body = '<div>';var responseText = '';res.set('Content-Type', 'text/html');ThemeModel.find({}, function(err, items) {items.map(function(item, i) {body += [`<img src="${item.img}" />`,`<p><a href="${item.url}" target="_blank">${item.text}</a></p>`].join('');});body += '</div>';responseText = html.replace('%{body}', body);res.send(responseText);});
});var server = app.listen(3000, function() {var host = server.address().address;var port = server.address().port;console.log('Example app listening at http://%s:%s', host, port);
});

转载于:https://my.oschina.net/itudou/blog/793313


http://www.ppmy.cn/news/917807.html

相关文章

js版的oschian分页类

为什么80%的码农都做不了架构师&#xff1f;>>> 代码如下&#xff1a; page.js代码如下 /** * 分页类 * pageCount // 分页总数 * currentPage // 当前页 * link // 连接地址 */ function Page(opts) {this.opts {// 基本配置pageCount: …

Objective-C中的一些特殊的数据类及NSLog的输出格式

Objective-C中的一些特殊的数据类及NSLog的输出格式 在Objective-C中&#xff0c;有一些我们之前并不熟悉但是经常见到的数据类型&#xff0c;比如id、nil、Nil、SEL等等。在很多文章里&#xff0c;我们都见过这些数据类型的介绍&#xff0c;但是都没有说的太清楚。 这篇文章从…

说说javascript变量类型和变量类型检测

为什么80%的码农都做不了架构师&#xff1f;>>> javascript是一种弱类型语言&#xff0c;它的典型例子就是即变量在使用的时候可以给它赋值任何类型。那么先来看下javascript都有那些变量类型已经它们的使用方法吧。 先来看看javascript都有那些类型吧&#xff1a;…

Objective-C-- id、nil、Nil、SEL、IMP、Method、Class

在Objective-C中&#xff0c;有一些我们之前并不熟悉但是经常见到的数据类型&#xff0c;比如id、nil、Nil、SEL等等。在很多文章里&#xff0c;我们都见过这些数据类型的介绍&#xff0c;但是都没有说的太清楚。 这篇文章从最底层的定义开始&#xff0c;介绍一下这些类型到底是…

jQuery剥皮三- data、proxy、event

为什么80%的码农都做不了架构师&#xff1f;>>> jquery1.4 jquery1.4下载 这里使用了 jQuery1.4&#xff0c;为什么使用 1.4 因为 1.4 很多特性没有添加分析起来相对容易。 这个 data 的实现是扩展在 jQuery 静态函数里面的&#xff0c;我们平常这样( $(#data).da…

jQuery剥皮二 - extend

为什么80%的码农都做不了架构师&#xff1f;>>> jquery1.4 jquery1.4下载 这里使用了 jQuery1.4&#xff0c;为什么使用 1.4 因为 1.4 很多特性没有添加分析起来相对容易。 extend 可以说是 jQuery 用的最多的函数之一了&#xff0c;除了核心的几个函数之外其他的…

无法访问srv解析_windows能连网络,可是打不开网页,出现无法解析server的DNS

首先&#xff0c;我想先说作为一名刚学完计算机网络课的学生&#xff0c;并且还完毕了学校的号称和斯坦福一个难度级别的网络实验之后。我觉得自己对于计算机网络还是勉强入门了。对于各种之前仅仅是听过的各种tcp、http、路由器、交换机、局域网、广域网等等都有了清晰的了解了…

Git 命令初识

取自&#xff1a;http://www.cnblogs.com/wupeiqi/p/7295372.html Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的&#xff0c;用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款…