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

相關文章
相關標籤/搜索