利用node.js 和 mockjs爬取数据到 mysql 数据库(Visual Studio Code)
注释:mysql 版本:5.5.56 通过Navicat for MySQL (版本11.1.3 64位)使用数据库(功能:Navicat for MySQL 可连接任何本机或远程 MySQL 服务器,功能包括数据模型工具、数据同步、导入或导出、报表、以及更多。)
1.首先新建一个文件夹用Visual Studio Code 打开,创建如图所示文件夹

2.在app.js集成终端中里面下载所需要的包:例如(mysql2,sequelize,mockjs,axios,cheerio)(右键打开集成终端)

下载命令:npm i (mysql2,sequelize,mockjs,axios,cheerio) --save [分别下载5个包] 下载完成

3.首先连接数据库(点击数据库右键连接信息查看)

//首先连接数据库 //导入sequelize const { Sequelize } = require("sequelize"); //根据实际配置修改 数据库名,用户名,密码 const sequelize = new Sequelize('movie','root','root',{ //主机名 host:'localhost', //所使用的语言 dialect:'mysql' }) //导出sequelize module.exports = sequelize;

4.需要爬取的网站中设置数据库表中的字段
//导入连接的数据库 const sequelize = require("./db") //导入下载的sequelize 定义为数据类型DataTypes const { DataTypes } = require("sequelize"); //设置数据库中的 表名,及 字段(这里的sequelize指的是连接的数据库) //films 表名 ;name、time、buildDate、imgUrl const films = sequelize.define('films',{ name:{ //类型 type:DataTypes.STRING, //是否为空 allowNull:false, }, time:{ type:DataTypes.STRING, }, buildDate:{ type:DataTypes.STRING, allowNull:false, }, imgUrl:{ type:DataTypes.STRING, }, },{ //paranoid表就是软删除而非硬删除机制的表。即只是做一个标记并不是真正的删除 paranoid:true, }); //导出films module.exports = films;

5.创建用户模型表
//导入movie require("./movie"); //导入数据库 const sequelize = require("./db"); //创建用户模型表 (async function(){ await sequelize.sync({alter:true}); console.log("用户模型表刚刚(重新创建)"); })()

6.在Navicat for MySQL 中创建一个叫movie的数据库

7.要在db.js的集成终端中下载sequelize
在sync的集成终端中运行



创建成功
8.爬取需要的数据
//导入mockjs的插件 const axios = require("axios").default; const cheerio = require("cheerio"); //导入movie const movie = require("../models/movie"); //爬取猫眼 // 先获取猫眼电影网页所有html信息 async function getMoviesHTML(){ const resp = await axios.get("https://www.maoyan.com/"); return resp.data; } // 获取每一个电影的链接 async function getMoviesLinks(){ const html = await getMoviesHTML(); const $ = cheerio.load(html); const nameElements = $("#app .content .main .movie-grid .panel .panel-content .movie-list .movie-item>a"); const links = nameElements.map((i,ele) => { const href = ele.attribs["href"]; return href; }).get() return links; } // getMoviesLinks(); // 获取每一个电影的其他详情信息 async function getMoviesDetail(detailUrl){ // console.log(detailUrl); const resp = await axios.get(`https://maoyan.com${detailUrl}`); const $ = cheerio.load(resp.data); // 获取电影名 const name = $('.banner .wrapper .celeInfo-right .movie-brief-container h1').text().trim(); // 获取图片路径 const imgUrl = $(".banner .wrapper .celeInfo-left .avatar-shadow img").attr("src"); // 获取放映时间 const buildDate = $('.ellipsis:eq(3)').text().trim().slice(0,10); // 电影时间 const time = $(".ellipsis:eq(2) ").text().trim().split('/')[1]; // console.log(e); return { name, imgUrl, buildDate, time } } // getMoviesDetail("/films/338384"); async function fetchall(){ const links = await getMoviesLinks(); const proms = links.map((link)=>{ return getMoviesDetail(link) }) return Promise.all(proms); } // fetchall() async function savaToDB(){ const movies = await fetchall(); await movie.bulkCreate(movies); console.log("数据保存至数据库"); } savaToDB();



浙公网安备 33010602011771号