步骤一:安装必要模块

(1)cheerio模块 ,一个类似jQuery的选择器模块,分析HTML利器。

(2)request模块,让http请求变的更加简单

(3)mysql模块,node连接mysql的模块

  1. npm i cheerio request mysql -D

步骤二:分析爬取网址的内容

目标URL:

http://zzk.cnblogs.com/s/blogpost?Keywords=%E6%B8%B8%E6%88%8F,游戏其实被编码成了%E6%B8%B8%E6%88%8F

分析:

var url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=' + key + '&pageindex=' + page;

如果key是中文,是会抓取不到任何数据,用JS函数url = encodeURI(url);转换一下就好。

用"pageindex="出现的位置加上本身长度即得到页数

page = nextUrl.slice(nextUrl.indexOf('pageindex=') + 10);

indexof是返回子串在母串的第一个位置,没有则-1,区分大小写

步骤三:创建数据表

(1)启动 mysql

  1. mysql -uroot -p123456

root是mysql用户名,123456是密码

(2)创建 database 数据库

  1. create database spider_data;

(3)查看 所有的 database 数据库

  1. show databases;

(4)进入 数据库

  1. use spider_data;

(5)创建 table 表单

  1. create table blog(
  2. id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. title VARCHAR(100) NOT NULL,
  4. href VARCHAR(100) NOT NULL,
  5. author VARCHAR(100) NOT NULL,
  6. time DATE,
  7. view INT(5) NOT NULL
  8. );

MySQL数据类型包括:整型、浮点型、日期类型、字符型,这里用表格的方式详细说明每个数据类型,这些只要记住常用的即可,需要再查阅。

整型

数据类型 存储范围 字节
TINYINT 有符号值:-128 到 127(-2727到2727)
无符号值:0到255(0到2828)
1
SMALLINT 有符号值:-32768 到 32767(-215到215215到215)
无符号值:0到65535(0到216216-1)
2
MEDIUMINT 有符号值:-8388608 到 8388607(-223到223223到223)
无符号值:0到16777215(0到224224)
3
INT 有符号值:-231到231231到231
无符号值:0到232到232-1
4
BIGINT 有符号值:-263到263263到263
无符号值:0到264到264-1
8

浮点型

数据类型 精度
FLOAT[(M,D)] 小数点后6-7位(常用)
DOUBLE[(M,D)] 小数点后14-15位

日期时间类型

日期类型 存储空间(字节) 日期格式 范围
datetime 8 YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp 4 YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038
date 3 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
year 1 YYYY 1901~2155
time 2 HH:MM:SS -838:59:59 ~ 838:59:59

字符型

列类型 说明
CHAR(M) M个字节,0<=M<=255,固定长度
VARCHAR(M) L+1个字节,其中L<M且0<M<65535,可以小于定于长度M
TINYTEXT L+1个字节,其中L<2828
TEXT L+2个字节,其中L<216216
MEDIUMTEXT L+3个字节,其中L<224224
LONGTEXT L+4个字节,其中L<232232
ENUM('value1','value2') 枚举,1或2个字节,取决于枚举的个数(最多216216-1个值)
SET('value1','value2') 集合,1,2,3,4,8个字节,取决于成员个数

(6)查看 当前数据库下的 数据表

  1. show tables;

(7)查看表结构

  1. desc blog;

步骤四:代码

  1. /**
  2. * 将node爬取到的数据,保存到mysql数据库中
  3. */
  4. var request = require('request');
  5. var cheerio = require('cheerio');
  6. var mysql = require('mysql');
  7. // 创建数据库连接
  8. var db = mysql.createConnection({
  9. host: '127.0.0.1',
  10. user: 'root',
  11. password: '123456',
  12. database: 'spider_data'
  13. });
  14. db.connect();
  15.  
  16. // 请求数据
  17. function fetchData(key, page) {
  18. var url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=' + key + '&pageindex=' + page;
  19. //用JS的全局对象函数,作为URI编码,不然中文,空格等抓取不到
  20. url = encodeURI(url);
  21. request(url, function(err, res) {
  22. if (err) return console.log(err);
  23. var $ = cheerio.load(res.body.toString());
  24. var arr = [];
  25. //解析HTML代码
  26. $('.searchItem').each(function() {
  27. var title = $(this).find('.searchItemTitle');
  28. var author = $(this).find('.searchItemInfo-userName a');
  29. var time = $(this).find('.searchItemInfo-publishDate');
  30. var view = $(this).find('.searchItemInfo-views');
  31. var info = {
  32. title: $(title).find('a').text(),
  33. href: $(title).find('a').attr('href'),
  34. author: $(author).text(),
  35. time: $(time).text(),
  36. view: $(view).text().replace(/[^0-9]/ig, '')
  37. };
  38. arr.push(info);
  39. //打印
  40. console.log('~~~~~~~~~~~~~~~~~~~~~~~ 输出开始 ~~~~~~~~~~~~~~~~~~~~~~~');
  41. console.log(info);
  42. console.log('~~~~~~~~~~~~~~~~~~~~~~~ 输出结束 ~~~~~~~~~~~~~~~~~~~~~~~');
  43. //保存数据
  44. db.query('insert into blog set ?', info, function(err, result) {
  45. if (err) throw err;
  46. if (!!result) {
  47. console.log('插入成功');
  48. console.log(result.insertId);
  49. } else {
  50. console.log('插入失败');
  51. }
  52. });
  53. });
  54.  
  55. //下一页
  56. var nextA = $('.pager a').last(),
  57. nextUrl = '';
  58. if ($(nextA).text().indexOf('Next') != -1) {
  59. nextUrl = nextA.attr('href');
  60. page = nextUrl.slice(nextUrl.indexOf('pageindex=') + 10);//"pageindex="出现的位置加上本身长度得到页数
  61. setTimeout(function() {
  62. fetchData(key, page);
  63. }, 2000);
  64. } else {
  65. db.end();
  66. console.log('结束,爬取完所有数据');
  67. }
  68. });
  69. }
  70.  
  71. // 调用
  72. fetchData('游戏开发', 1);

.

node 爬虫 --- 将爬取到的数据,保存到 mysql 数据库中的更多相关文章

  1. Python scrapy爬虫数据保存到MySQL数据库

    除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...

  2. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  3. python之scrapy爬取数据保存到mysql数据库

    1.创建工程 scrapy startproject tencent 2.创建项目 scrapy genspider mahuateng 3.既然保存到数据库,自然要安装pymsql pip inst ...

  4. 将 node.js 的数据保存到 mongo 数据库中

    Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...

  5. 快速将excel数据保存到Oracle数据库中【转】

    我们在工作中,也许会碰到以下情况,客户或者同事发来需要调查的数据,并不是dmp文件,而是excel文件,此时通常是一张表,少量几条记录.最近我恰好碰到了这种情况,所以做了些调查,不敢藏私,拿出来跟大家 ...

  6. 如何将大数据保存到 MySql 数据库

    1. 什么是大数据 1. 所谓大数据, 就是大的字节数据,或大的字符数据. 2. 标准 SQL 中提供了如下类型来保存大数据类型: 字节数据类型: tinyblob(256B), blob(64K), ...

  7. 爬取网贷之家平台数据保存到mysql数据库

    # coding utf-8 import requests import json import datetime import pymysql user_agent = 'User-Agent: ...

  8. python selenium爬取自如租房数据保存到TXT文件

    # -*- coding: utf-8 -*-"""Created on Fri Aug 31  2018 @author: chenlinlab"" ...

  9. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

随机推荐

  1. python 基础知识汇总—— if else while continue

    1.if 语句 什么是if语句?if语句用来干什么的? if语句说通俗点,就是判断,如果判断条件为真,那么就执行语句,就像我们生活中例子,如果你饿了,判断为真,就要吃饭,于是你就会执行吃饭这个动作,如 ...

  2. Python文件指针与Python函数

    文件内指针移动:f.seek() 强调:只有t模式下read(n),n代表字符的个数,除此以外都是以字节为单位. """ 文件内容:哈哈哈哈 呵呵呵呵 "&qu ...

  3. google F12

    谷歌浏览器(Google Chrome)开发调试详细介绍 博客分类: 前端 浏览器chromegoogle调试开发  很多Web前台开发者都喜欢这种浏览器自带的开发者工具,这对前台设计.代码调试很大帮 ...

  4. 【javascript面试题】之一

    1.求y和z的值是多少?<script type="text/javascript">var x = 1;var y = 0;var z = 0;function ad ...

  5. Python 多级目录选择+一键正反排序

    效果如图所示,可以根据条件来选择对象 cat pc.py #!/usr/bin/pythonfrom flask import Flask,render_template,request,redire ...

  6. 【03】Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办?

    [03] Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办? 刚好也遇上了这个问题,百度了一下,以下是解决方法,亲测可行: 1.首先把需要安装的第三方插件,后缀.c ...

  7. C# 方法冒号this的用法

    public Class1(string host, int port, string password = null):this() { this.Host=host; this.Port=port ...

  8. LightOJ——1066Gathering Food(BFS)

    1066 - Gathering Food   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB W ...

  9. Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)

    最近项目要用到mybatis中间件,中间涉及到要对表结构生成bean,dao,和sqlconfig.xml 所以记录一下学习过程 首先是准备工作,即准备需要的jar包:我们的数据库mysql,所以驱动 ...

  10. 【2018.11.23】2018WCTest(8)

    T1 小 $X$ 无敌就是指他的防御 $\ge$ 怪物的攻击 $n$.另外小 $X$ 最多只需要把攻击加到怪物的防御 $k$,此时已经能一招秒一个,再多加必定无用且需承受更多伤害. $20$ 分 $d ...