其中fs 系统自带,不必安装。其余需要运行以下代码安装:
npm install -S mysql http cheerio
运行结果
代码
const http = require('http'); // 导入http模块
const mysql = require('mysql'); // 导入mysql 模块
const fs = require('fs'); // 导入文件系统模块
const cheerio = require('cheerio'); // 导入cherrio模块,这个模块类似jQuery,可操作dom
// =================config====================
const aim_url = "http://www.1905.com"; // 目标URL
// 连接数据库的配置
let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'nodejs' // 数据库名称
});
connection.connect(); // 连接数据库
console.log('========连接Mysql成功========');
// 获取数据
get_data(aim_url, deal_with_data);
// deal_with_data是一个回调函数,下面定义好了的。
// ========================以下为辅助函数 =======================
function write_to_sql(href, alt) {
let addSql = 'INSERT INTO info(href,alt) VALUES(?,?)';
let addSqlParams = [href, alt];
// 很简单,sql语句,?占位,addSqlParams补充占位内容。
connection.query(addSql, addSqlParams, function (err, result) {
if (err) {
console.log('[INSERT ERROR] - ', err.message);
return;
}
//console.log('INSERT ID:',result.insertId);
console.log('Success!! --- INSERT ID:', result);
});
}
function write_file(filename, cnt) {
// fs.writeFile(filename,data,[options],callback);
let buffer_data = Buffer.from(cnt);
fs.writeFile(__dirname + '/' + filename, buffer_data, {flag: 'a'}, function (err) {
if (err) {
console.error(err);
} else {
console.log('写入成功');
}
});
}
// 获取网页源代码完毕 的 回调函数
function deal_with_data(html) {
write_file('content.html', html)
// 这里将网页内容写到content.html文件
let $ = cheerio.load(html);
let list = $("li");
// 遍历每一个li,提取出href,alt属性。
list.each(function (item) {
let a = $(this).find('a');
let href = a.attr('href');
let alt = a.attr('alt');
// 过滤掉没有alt的,因为这里是直接获取所有li元素,有些不是目标元素
if (alt !== undefined) {
write_to_sql(href, alt);
}
});
connection.end();
// 最后必须结束数据库连接,不然程序会持续等待
}
// 获取网站源代码函数
function get_data(url, call) {
// get 方法获取数据
http.get(url, function (res) {
let html = '';
// 将数据放到html变量
res.on('data', function (data) {
html += data;
});
res.on('end', function () {
call(html);
// console.log(html.toString());
});
}).on('error', function () {
console.log('获取源代码错误!');//报错
});
}
代码作用以后再讲,11点了,关灯睡觉啦。 作用已补充,请看代码注释!
因为这是一个期末node.js的简单作业,老师要求是保存到数据库中,万幸是
Mysql
,不是该死的Sql Server
。
所以我们需要创建一个数据库,并创建一张表:
CREATE DATABASE nodejs;
CREATE TABLE `nodejs`.`info` (
`id` int(0) UNSIGNED NOT NULL AUTO_INCREMENT,
`href` varchar(255) NOT NULL,
`alt` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);