sql
-- ----------------------------
DROP TABLE IF EXISTS `websites`;
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `job`;
//属性定义可能不严谨,第一次定义
CREATE TABLE `job` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(20) NOT NULL DEFAULT '' COMMENT '题目',
`money` varchar(20) NOT NULL DEFAULT '' COMMENT '薪资',
`company` char(11) NOT NULL DEFAULT '0' COMMENT '公司',
`position` char(10) NOT NULL DEFAULT '' COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
DROP TABLE IF EXISTS `php`;
CREATE TABLE `php` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` char(20) NOT NULL DEFAULT '' COMMENT '题目',
`money` varchar(20) NOT NULL DEFAULT '' COMMENT '薪资',
`company` char(11) NOT NULL DEFAULT '0' COMMENT '公司',
`position` char(10) NOT NULL DEFAULT '' COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Records of `websites`
-- ----------------------------
BEGIN;
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
依赖
npm install cheerio --save-dev // 后面会用到,用于抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现
npm install superagent --save-dev
npm i mysql -S //可以自定义想要的
app.js
//导入依赖包
const fs = require("fs");
const superagent = require("superagent");
const cheerio = require("cheerio");
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'xxxxxxx',
user: 'xxxx',
password: 'xxxxx',
port: '3306',
database: 'xxxxx'//远程的话,自己对应好
});
connection.connect();
superagent
.get("https://www.zhipin.com/job_detail/?query=&city=100010000&industry=&position=110302") //地址倒是改成你目的地址
.end((error, response) => {
//获取页面文档数据
var content = response.text;
//cheerio也就是nodejs下的jQuery 将整个文档包装成一个集合,定义一个变量$接收
var $ = cheerio.load(content);
//定义一个空数组,用来接收数据
var result = [];
//分析文档结构 先获取每个li 再遍历里面的内容(此时每个li里面就存放着我们想要获取的数据)
$(".job-list li .job-primary").each((index, value) => {
var title = $(value).find(".name .job-title").text();
var money = $(value).find(".name .red").text();
var company = $(value).find(".info-company a").text();
var position = $(value).find(".info-publis .name").text();
result.push({
title: title,
money: money,
company: company,
position: position,
});
var addSql = 'INSERT INTO job(Id,title,money,company,position) VALUES(0,?,?,?,?)';
var addSqlParams = [title, money, company, position];
//增
connection.query(addSql, addSqlParams, function (err, result) {
if (err) {
console.log('[INSERT ERROR-] - ', err.message);
return;
}
});
});
//将数组转换成字符串
result = JSON.stringify(result);
//将数组输出到json文件里 刷新目录 即可看到当前文件夹多出一个boss.json文件(打开boss.json文件,ctrl+A全选之后 ctrl+K,再Ctrl+F即可将json文件自动排版)
fs.writeFile("boss1.json", result, "utf-8", (error) => {
//监听错误,如正常输出,则打印null
if (error == null) {
console.log("恭喜您,数据爬取成功!)");
}
});
});
// connection.end(); 如果不注销的会报错 2013
node app.js
可视化工具 navicat
可以发现,node.js对前端还是很友好的