node 爬虫 --- 将爬取到的数据,保存到 mysql 数据库中
步骤一:安装必要模块
(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 数据库中的更多相关文章
- Python scrapy爬虫数据保存到MySQL数据库
除将爬取到的信息写入文件中之外,程序也可通过修改 Pipeline 文件将数据保存到数据库中.为了使用数据库来保存爬取到的信息,在 MySQL 的 python 数据库中执行如下 SQL 语句来创建 ...
- 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB
本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...
- python之scrapy爬取数据保存到mysql数据库
1.创建工程 scrapy startproject tencent 2.创建项目 scrapy genspider mahuateng 3.既然保存到数据库,自然要安装pymsql pip inst ...
- 将 node.js 的数据保存到 mongo 数据库中
Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...
- 快速将excel数据保存到Oracle数据库中【转】
我们在工作中,也许会碰到以下情况,客户或者同事发来需要调查的数据,并不是dmp文件,而是excel文件,此时通常是一张表,少量几条记录.最近我恰好碰到了这种情况,所以做了些调查,不敢藏私,拿出来跟大家 ...
- 如何将大数据保存到 MySql 数据库
1. 什么是大数据 1. 所谓大数据, 就是大的字节数据,或大的字符数据. 2. 标准 SQL 中提供了如下类型来保存大数据类型: 字节数据类型: tinyblob(256B), blob(64K), ...
- 爬取网贷之家平台数据保存到mysql数据库
# coding utf-8 import requests import json import datetime import pymysql user_agent = 'User-Agent: ...
- python selenium爬取自如租房数据保存到TXT文件
# -*- coding: utf-8 -*-"""Created on Fri Aug 31 2018 @author: chenlinlab"" ...
- 将爬取的数据保存到mysql中
为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...
随机推荐
- python 基础知识汇总—— if else while continue
1.if 语句 什么是if语句?if语句用来干什么的? if语句说通俗点,就是判断,如果判断条件为真,那么就执行语句,就像我们生活中例子,如果你饿了,判断为真,就要吃饭,于是你就会执行吃饭这个动作,如 ...
- Python文件指针与Python函数
文件内指针移动:f.seek() 强调:只有t模式下read(n),n代表字符的个数,除此以外都是以字节为单位. """ 文件内容:哈哈哈哈 呵呵呵呵 "&qu ...
- google F12
谷歌浏览器(Google Chrome)开发调试详细介绍 博客分类: 前端 浏览器chromegoogle调试开发 很多Web前台开发者都喜欢这种浏览器自带的开发者工具,这对前台设计.代码调试很大帮 ...
- 【javascript面试题】之一
1.求y和z的值是多少?<script type="text/javascript">var x = 1;var y = 0;var z = 0;function ad ...
- Python 多级目录选择+一键正反排序
效果如图所示,可以根据条件来选择对象 cat pc.py #!/usr/bin/pythonfrom flask import Flask,render_template,request,redire ...
- 【03】Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办?
[03] Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办? 刚好也遇上了这个问题,百度了一下,以下是解决方法,亲测可行: 1.首先把需要安装的第三方插件,后缀.c ...
- C# 方法冒号this的用法
public Class1(string host, int port, string password = null):this() { this.Host=host; this.Port=port ...
- LightOJ——1066Gathering Food(BFS)
1066 - Gathering Food PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB W ...
- Mybatis 如何自动生成bean dao xml 配置文件 generatorconfig.xml (main()方法自动生成更快捷)
最近项目要用到mybatis中间件,中间涉及到要对表结构生成bean,dao,和sqlconfig.xml 所以记录一下学习过程 首先是准备工作,即准备需要的jar包:我们的数据库mysql,所以驱动 ...
- 【2018.11.23】2018WCTest(8)
T1 小 $X$ 无敌就是指他的防御 $\ge$ 怪物的攻击 $n$.另外小 $X$ 最多只需要把攻击加到怪物的防御 $k$,此时已经能一招秒一个,再多加必定无用且需承受更多伤害. $20$ 分 $d ...