文档章节

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

开源中国最帅没有之一
 开源中国最帅没有之一
发布于 2016/11/24 02:34
字数 416
阅读 76
收藏 1

使用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);
    // 抽出列表 li
    items = $('.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);
});

© 著作权归作者所有

开源中国最帅没有之一

开源中国最帅没有之一

粉丝 42
博文 22
码字总数 14155
作品 5
成都
程序员
私信 提问
直播平台弹幕助手/抓包/开源代码修改

技术关键词: https node.js socket.io javascript 项目总览:监控并抓取陌陌直播平台所有在线房间的弹幕/礼物/发言信息并存入数据库。 本众包需求: 整个项目最难的一步:找到弹幕服务器的连...

Markery_Move
2016/06/28
162
0
实例:使用puppeteer headless方式抓取JS网页

google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的动态内容,如JavaScript,能够更好的模拟用户。 有些网站的反爬虫手段是将部分内...

caiyongji
2018/05/09
343
0
四、nodejs使用 superagent 与 cheerio 完成简单爬虫

目标 输出 CNode(https://cnodejs.org/ ) 社区首页的所有帖子标题和链接,以 json 的形式。 使用 superagent 抓取网页 使用 cheerio 分析网页 内容 安装依赖 express,superagent 和 cheeri...

米修米修er
06/12
14
0
PuppeteerSharp: 更友好的 Headless Chrome C# API

前端就有了对 headless 浏览器的需求,最多的应用场景有两个 UI 自动化测试:摆脱手工浏览点击页面确认功能模式 爬虫:解决页面内容异步加载等问题 也就有了很多杰出的实现,前端经常使用的莫...

张善友
03/09
0
0
PhantomJs+CasperJs的安装与使用

PhantomJs是所谓的“headless”浏览器,可以理解为一个没有GUI的全功能浏览器。CasperJs是它的一个扩展。 安装流程: 1,安装Nodejs: 下载地址:https://nodejs.org/en/ 2,安装Phantomjs:...

leochensh
2015/11/25
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部