步骤一:安装必要模块

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

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

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

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

mysql -uroot -p123456

root是mysql用户名,123456是密码

(2)创建 database 数据库

create database spider_data;

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

show databases;

(4)进入 数据库

use spider_data;

(5)创建 table 表单

create table blog(
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
href VARCHAR(100) NOT NULL,
author VARCHAR(100) NOT NULL,
time DATE,
view INT(5) NOT NULL
);

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)查看 当前数据库下的 数据表

show tables;

(7)查看表结构

desc blog;

步骤四:代码

/**
* 将node爬取到的数据,保存到mysql数据库中
*/
var request = require('request');
var cheerio = require('cheerio');
var mysql = require('mysql');
// 创建数据库连接
var db = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: '123456',
database: 'spider_data'
});
db.connect(); // 请求数据
function fetchData(key, page) {
var url = 'http://zzk.cnblogs.com/s/blogpost?Keywords=' + key + '&pageindex=' + page;
//用JS的全局对象函数,作为URI编码,不然中文,空格等抓取不到
url = encodeURI(url);
request(url, function(err, res) {
if (err) return console.log(err);
var $ = cheerio.load(res.body.toString());
var arr = [];
//解析HTML代码
$('.searchItem').each(function() {
var title = $(this).find('.searchItemTitle');
var author = $(this).find('.searchItemInfo-userName a');
var time = $(this).find('.searchItemInfo-publishDate');
var view = $(this).find('.searchItemInfo-views');
var info = {
title: $(title).find('a').text(),
href: $(title).find('a').attr('href'),
author: $(author).text(),
time: $(time).text(),
view: $(view).text().replace(/[^0-9]/ig, '')
};
arr.push(info);
//打印
console.log('~~~~~~~~~~~~~~~~~~~~~~~ 输出开始 ~~~~~~~~~~~~~~~~~~~~~~~');
console.log(info);
console.log('~~~~~~~~~~~~~~~~~~~~~~~ 输出结束 ~~~~~~~~~~~~~~~~~~~~~~~');
//保存数据
db.query('insert into blog set ?', info, function(err, result) {
if (err) throw err;
if (!!result) {
console.log('插入成功');
console.log(result.insertId);
} else {
console.log('插入失败');
}
});
}); //下一页
var nextA = $('.pager a').last(),
nextUrl = '';
if ($(nextA).text().indexOf('Next') != -1) {
nextUrl = nextA.attr('href');
page = nextUrl.slice(nextUrl.indexOf('pageindex=') + 10);//"pageindex="出现的位置加上本身长度得到页数
setTimeout(function() {
fetchData(key, page);
}, 2000);
} else {
db.end();
console.log('结束,爬取完所有数据');
}
});
} // 调用
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. 牛客网暑期ACM多校训练营(第一场)J Different Integers(树状数组, 离线)

    题意: 给定n个数字, 然后给出m个区间, 求区间外其他数字的种类有多少. 分析: 将区间以r为基准升序排序, 每次处理pre~r的数字第一次出现的位置. #include<bits/stdc+ ...

  2. 【18】什么是FOUC?如何避免

    [18]什么是FOUC?如何避免 Flash Of Unstyled Content: 用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁. 解决方法: ...

  3. [uiautomator篇]uiwatcher 的使用场景

    http://www.yangyanxing.com/article/use-watcher-in-uiautomator.html   今天在uiautomator中实践了watcher的用法,这个 ...

  4. LINQ学习笔记 Join 与 Group join

    LINQ中的Join对应T-SQL中的内连接,并无左连接的方法,当然也没有右连接. 要达成Left join必须依靠GroupJoin来完成. GroupJoin顾名思义就是先集团在做加入,加入的不同 ...

  5. Scala基础知识[一]

    摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言.设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Jav ...

  6. Luogu【P2904】跨河(DP)

    题目链接在这里 此题DP.用一个前缀和一样的东西,把载i个奶牛的时间求出来,然后DP代码如下: ;i<=n;++i){ f[i]=que[i]; ;j<i;++j) f[i]=min(f[ ...

  7. 【Luogu】P3414组合数(快速幂)

    题目链接 从n的元素中选零个,选一个,选两个,选三个...选n个的方案数和,其实就是n个元素中取任意多个元素的方案数,那对于每一个元素,都有取或不取两种情况,所以方案数最终为2^n个. #includ ...

  8. BZOJ 1829 [Usaco2010 Mar]starc星际争霸 ——半平面交

    发现最终的结果只和$s1$,$s2$,$s3$之间的比例有关. 所以直接令$s3=1$ 然后就变成了两个变量,然后求一次半平面交. 对于每一个询问所属的直线,看看半平面在它的那一侧,或者相交就可以判断 ...

  9. OS X 下iso刻录U盘(系统安装启动盘)

    1. 查看盘 $diskutil list /dev/disk0 #: TYPE NAME SIZE IDENTIFIER : GUID_partition_scheme *320.1 GB disk ...

  10. eclipse中AXIS2发布过程

    Axis2服务端研究好几个小时,终于解决了 需要下载: 地址1: 可以从镜像站下载: 上海大学开源镜像站 地址2: 链接:从百度网盘下载; 密码:8nwu 其中第二个可以不用下: 解压后 将3,4解压 ...