后台: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的域名时,不可以在真机上预览