全栈练习(后台:node + node爬虫 + mysql;前台:小程序)

284 阅读1分钟

后台:node + node爬虫 + mysql;前台:小程序

实现原理:

用node爬虫从网站获取别人的数据,然后存在mysql数据库里面,最后在小程序访问接口时,将数据库里面的数据读出来返回给小程序。

后台

var mysql = require('mysql');
const request = require('superagent');
const cheerio = require('cheerio');

const express = require('express');
const app = express();

let url = 'https://juejin.im/welcome/frontend';
var arr = [];

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'root',
    port: '3306',
    database: 'pengdan'
});
connection.connect();
var delSql = 'delete from title';
var addSql = 'INSERT INTO title(id,name,author,tag,agreen,comment,link) VALUES(?,?,?,?,?,?,?)';
var sql = 'SELECT * FROM title';
var data = '';
request.get(url).end((request, res) => {
    let $ = cheerio.load(res.text);
    //删
    connection.query(delSql,function(){
        console.log('先删除');
    });
    //增
    $('.info-box').each((index, ele) => {
        arr.push({
            'name': $(ele).find('.info-row.title-row a').text(),
            'author': $(ele).find('.user-popover-box a').text(),
            'tag': $(ele).find('.item.tag a').text(),
            'agreen': $(ele).find('.title-box span').text(),
            'comment': $(ele).find('.comment.clickable span').text(),
            'link': $(ele).find('.info-row.title-row a').attr('href')
        })
        connection.query(addSql, [index, $(ele).find('.info-row.title-row a').text(), $(ele).find('.user-popover-box a').text(), $(ele).find('.item.tag a').text(), $(ele).find('.title-box span').text(), $(ele).find('.comment.clickable span').text(), $(ele).find('.info-row.title-row a').attr('href')], function (err, result) {
            if (err) {
                console.log('[INSERT ERROR] - ', err.message);
                return;
            }
            console.log('再添加')
        });
    })
    //查
    connection.query(sql, function (err, result) {
        if (err) {
            console.log('[SELECT ERROR] - ', err.message);
            return;
        }
        data = result;
        console.log('最后查')
    });
    connection.end();
})

app.get('/hello', (require, res) => res.send(data));
app.listen(3000, () => console.log('running!'))

前台小程序端

接口地址直接访问:http://127.0.0.1:3000/hello即可,然后将设置处的http检验关掉

得到列表后可以在详情页用webview放真正的详情页

注:小程序用127.0.0.1的域名时,不可以在真机上预览