Node | 自我爬虫掘金专栏文章

写在前面

  • 转载请标注来源(请尊重原创及想法思路)
  • 本篇的 demo 案例仅做为演示案例,练习案例,禁止商用
  • 若有问题致邮:youngwanlia@gmail.com

需求概述

因为后续会搭建一个 全栈我的网站,目前暂定放一些技术文档 全民K歌资源 B站制做的视频,也打算把博客集成在网站中。因此本篇就来分享一下node爬虫。 总体这个网站分为三个部分node

  • 音乐 :第三方平台本身没事录的歌
  • 视频 :第三方平台剪辑的视频
  • 文章 :日常没事的技术文档

这篇就打算先爬虫一些数据,暂且放在本地的数据库里mysql

前期准备

俗话说,工欲善其事,必先利其器,那么前期准备无非即是jquery

  • 参阅文档
  • 环境工具

必阅文档

至于爬个虫为何还须要jQuery 呢,请接着阅读web

环境准备

  • node && nodemon
npm install -g nodemon
复制代码

20200220184917.png

  • axios
yarn add  axios
复制代码
  • mysql
yarn add mysql
复制代码
  • cheerio
yarn add cheerio
复制代码

需求分析

获取专栏的列表,刷新列表页分析接口的请求 sql

20200220204021.png
爬取相关的数据,而后存入 数据库表里

通过咱们对接口的分析,得出:得到数据专栏的api即是这个数据库

https://timeline-merger-ms.juejin.im/v1/get_entry_by_self?src=web&uid=5cf00b7c6fb9a07eba2c226f&device_id=1580692913721&token=eyJhY2Nlc3NfdG9rZW4iOiJqa3FzYTJaUzB3cTY3VVBoIiwicmVmcmVzaF90b2tlbiI6ImJrcG9LMnAyaUlSUFRvSFUiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D&targetUid=5cf00b7c6fb9a07eba2c226f&type=post&limit=20&order=createdAt
复制代码

发现能够直接浏览器地址栏查询,目前来看的话只有14条,由于我才刚刚写14npm

20200220204554.png

那咱们就在 node 环境下跑一下这个接口

async function getEntryBySelf() {
  let reqUrl = `https://timeline-merger-ms.juejin.im/v1/get_entry_by_self?src=web&uid=5cf00b7c6fb9a07eba2c226f&device_id=1580692913721&token=eyJhY2Nlc3NfdG9rZW4iOiJqa3FzYTJaUzB3cTY3VVBoIiwicmVmcmVzaF90b2tlbiI6ImJrcG9LMnAyaUlSUFRvSFUiLCJ0b2tlbl90eXBlIjoibWFjIiwiZXhwaXJlX2luIjoyNTkyMDAwfQ%3D%3D&targetUid=5cf00b7c6fb9a07eba2c226f&type=post&limit=20&order=createdAt`;
  const res = await axios.get(reqUrl);
  const {
    s,
    m,
    d: { total, entrylist }
  } = res.data;
  if (s === 1 && m === "ok") {
    // 请求成功
    return entrylist;
  } else {
    return `reqErr`;
  }
}
复制代码

20200220210104.png

MySql 结合 Node

咱们经过使用node环境而后操做数据库,在这篇文章就简单的说一下数据相关的操做,后续会持续更新,但愿可以关注笔者github

数据库链接

// 配置对象
const config = {
  host: "localhost", // 主机地址
  user: "root", // 数据库用户
  password: "123456", // 密码
  database: "blog" // 数据库
};
// 创建链接
let con = mysql.createConnection(config);
con.connect(err => {
  if (err) {
    console.log(`数据库创建失败`);
  }
});
复制代码

建表-专栏

blog 数据库新建zhuan_lan表用来存放掘金专栏的文章,并初始化一些字段,这里与爬取的数据字段名大体一致

20200222190951.png

插入数据库

// 数据插入数据库
// let testSql = "INSERT INTO zhuan_lan (collectionCount,commentsCount,originalUrl,createdAt,screenshot,content,titlte,category,viewsCount,summaryInfo) VALUES (21,2121,'212','212','212','212','212','221','2121','212')";
let iblogSql =
  "INSERT INTO zhuan_lan (collectionCount,commentsCount,originalUrl,createdAt,screenshot,content,titlte,category,viewsCount,summaryInfo) VALUES (?,?,?,?,?,?,?,?,?,?)";
// 插入数据
con.query(iblogSql, arrData, (err, res) => {
  if (err) {
    console.log(err);
  } else {
    console.log(`插入成功`);
  }
});
复制代码

20200222195953.png

插入数据库

20200222200348.png

本章小结

假若对爬虫感兴趣的话,能够多多交流。本篇全部完整代码在样小样童鞋的day-up仓库

day-up/nodeDemos/spider-demo/
复制代码

提问 有个问题请教一下:把平常的小案例放在一个仓库里,是否是对点赞有影响

相关文章
相关标签/搜索