Python爬虫-MySQL

Python爬虫-MySQL

前言

在请求数据、提取数据后,咱们还须要作什么呢?答案无疑是:存储数据。这以前,咱们每一次都将数据保存在文本txt格式中,这没什么不能够的。但并不存在“各样问题最优解指向同一答案”。咱们须要多掌握——至少也得是了解——主流存储数据的方法。
会以MySQL,MongDB,Redis顺序,以及其余这样的顺序一一介绍。然而咱们并不是担任“数据管理员”一职,因此介绍内容可能相对“简陋”,但我想够用就好,必要时动动手指找度娘!(并不是我不用谷歌,是不想把大家“基佬”化)mysql

三范式

MySQL的一种规范。说到它,咱们应该立马在脑海里反应出“关系型数据”。
1. 第一范式:列不能够拆分
2. 第二范式:惟一标识(经过属性找到惟一对象)
3. 第三范式:引用主键(引用关系的时候只能引用主键)
每个范式都创建在前一个范式的基础之上git

经常使用字段类型

  1. 数字类型:int, decimal
  2. 字符串:char(固定长度,无数据本身补充), varchar(可变长度),text
    关于三者的详细区别这里写图片描述
  3. 日期:datetime
  4. 布尔:bit

约束

  1. 主键约束:primary key
  2. 非空:not null
  3. 惟一:unique
  4. 默认:default
  5. 外键:foreign key

SQL语句命令行

登录操做

(一样,我仍不爱讲如何安装,由于安装环境才是最难环节有木有啊)
1. 启动数据库:win环境net start mysql;ubuntu环境service mysql start
2. 关闭数据库:win环境net stop mysql;ubuntu环境service mysql stop
3. 登录数据库:mysql -u 用户 -p;远程登录数据库:mysql -h ip地址 -u 用户 -p(远程链接须要设置,后面会讲)github

用户操做

首次安装mysql后须要root帐户登录,密码为空,通常状况下,咱们须要为root设置一下密码
1. alter user "root"@"localhost" identified by "newPassword";
2. 另外一种修改密码方式:
set password for "username"@"localhost"=password("newPassword");
若是修改的是当前用户密码也能够:set password=password("newpassword");
==上面的localhost并不是固定,须要看实际状况,但通常默认为localhost。查看方式:==
use mysql;使用名为mysql的数据库
select Host,User from user;显示user表中的Host,User字段
这里写图片描述
3. 通常不会直接root帐户对数据库操做,因此建立普通用户:
create user "username"@"localhost" identified by "password"(localhost的意思是本地,若是须要远程访问,能够改成:%)
4. 为用户受权:
grant all on *.* to "username"@"loaclhost"(所有权限)
grant all privileges on databasename.tablename to "username"@"localhost"
(仅增删查改的权限,指定某个数据库的某个表)
5. 撤销权限:
revoke all privileges on databaseName.tableName from "user"@"localhost"
==撤销命令必定要对应受权语句,即:权限部分,针对数据必须同样,否则不起做用==
6. 查看受权语句:show grants for "username"@"%";
这里写图片描述
7. 删除用户:drop user "test"@"localhost";sql

数据库操做

  1. 退出:quit;或者exit;
  2. 显示时间:select now();
  3. 查看版本:select version()
  4. 建立数据库而且指定编码方式:create database 数据库名 charset=utf8;
  5. 删除数据库:drop database 数据库名;
  6. 切换数据库:use 数据库名;
  7. 查看当前使用数据库:select databse();
  8. 查看用户全部数据库名:show databases;

表操做

  1. 建立表:
    create table 表名(id int auto_increment primary key not null,sname varchar(10) not null);表示建立一个表,有id字段,自增加型,主键,不为空;sname字段,varchar类型,限长10,不为空(不写not null默承认为空,且不能建立空表)
  2. 增长列表:alter table 表名 add 列名 数据类型;
  3. 修改列名:alter table 表名 change 旧列 新列 数据类型
    若是仅仅修改数据类型,旧列和新列仍要写出来,写同样;或者另外一种方法:
    alter table 表名 modify 列名 数据类型;
  4. 修改代表:rename table 表名(旧) to 表名(新);
  5. 查看表的建立语句:show create table 表名;
  6. 查看表结构:desc 表名;
  7. 删除表:drop table 表名;

数据操做

  1. 增(insert)
    a. 全列插入:insert into 表名 values(值1,值2...);
    b. 缺省插入:insert into 表名(列1,列2...) values(值1,值2);
    c. 同时插入多条数据:
    insert into 表名 values(...),(...)...;
    insert into 表名(...) values(...),(...)...;
    ==主键若是是自增加型,全列插入时须要占位,一般用0,插入成功后以实际数据为准==
  2. 删(delete)
    a. 物理删除:delete from where 条件;
    b. 逻辑删除:通常重要数据不作直接删除,能够添加列isdelete数据类型为bit,默认值0,若是删除对其赋值1
    alter table 表名 add isdelete bit default 0;
  3. 查(select)
    a. 条件查询:select * from 表名 where 条件;
    b. 模糊查询:
    select * from 表名 where 列名 like "黄%";
    select * from 表名 where 列名 like "黄_";
    d. 查询范围:
    ... where id in (1, 3, 5);id值为1,3, 5
    ...where id between 1 and 4;id值在1~4间,包括1,4
    ... where id is null;id值为0
    e. 若是某列数据类型二进制,直接查询是不会显示
    select isdelete+0 from...十进制显示
    select bin(isdelete+0) from...二进制显示
    select oct(isdelete+0) from...八进制显示
    select hex(isdelete+0) from...十六进制显示
    这里写图片描述
    e. 综合:...where 条件A and 条件B ...;
    ==条件能够随意搭配,经过and,or链接,优先级:括号>not>比较运算符>逻辑运算符;and比or先运算==
  4. 改(update)
    a. update 表名 set 列1=值1,... where 条件;

事务

  1. 什么是事务:一个业务须要多个操做时,若是有一个失败,那么看作所有失败。使用事物便可以退回到全部操做以前,使得数据不会受损
  2. 事务的四个特性(ACID):
    a) 原子性(A):事务的操做不可分割,要么都执行,要么都不执行
    b) 一致性(C):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致
    c) 隔离性(I):事务的执行不受其余事务的干扰,产生的中间结果对于其余事务来讲必须是透明的
    d) 持久性(D):对于任意已提交的事务,系统必须保证该事务对数据的改变不被丢失,即便数据出现故障
    ==表的格式必须是innodb 或者 bdb,才能够对这个表使用事务==
  3. 查看表的建立语句:
    show create table students;
  4. 修改表的类型:
    alter table students engine=innodb;
  5. 事务语句:
    a) begin 开始
    b) commit 提交
    c) rollback 回滚

与Python交互

  1. 导包:import pymysql
  2. 建立链接对象
    conn = pymysql.connect(host="",port=3306, user="", password="",db="");
    默认开启事务,对应方法:conn.commit()提交;rollback()回滚
  3. 建立光标对象
    cursor = connect.cursor();
    对象方法:
    a. cursor.execute(sql)执行sql语句
    b. cursor.fetchall()若是执行的是查询语句,fetchall()负责返回查询到的所有结果,返回元组类型
  4. 关闭光标以及数据库链接
    cursor.close()
    conn.close()

QQ音乐之体面

目标歌曲《体面》,热门评论4000条
虽然QQ音乐号称四千条,实际抓取下来只有3600+,我随机查看了一些接口,发现的确不可能四千条
这里写图片描述
这里写图片描述chrome

关注点
1. 注意数据来源,此次不是获取静态网页,而是经过chrome浏览器开发者工具找到热评的API接口
2. 数据库插入遇到表情符,修改编码格式为utf8md4
若是windows环境能够如下操做
a. 在mysql的安装目录下找到my.ini,作以下修改:
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
修改后重启mySQL:net stop mysql ; net start mysql
b.将已经建立好的表也转换成utf8mb4
alter table 表名 convert to character set utf8mb4 collate utf8mb4_bin;
3. 数据库插入双引号报错问题
利用replace()替换,将全部英文双引号转义(\"数据库

在最后

  1. MySQL的操作远不止这些,但针对【爬虫】而言中,须要用到的操作以上应该足够,若是想深刻,能够网上查询资料学习
  2. 利用pymysql模块能够动态建立数据库和数据表,但不建议这样作,应该提早在mysql中建立好

完整代码已上传GitHub,点击可查看。ubuntu

相关文章
相关标签/搜索