MySQL資料庫與MongoDB資料庫在python 環境下的使用以及豆瓣電影top250的爬蟲練習
1. MySQL資料庫的增、刪、改、查
在命令行中打開mysql 資料庫,使用以下命令:
show databases;#顯示本地的所有資料庫use wei_test;#工作目錄切換到wei_test這個資料庫裡面show tables;#顯示這個資料庫裡面所有的數據表
首先我們創建一個數據表
drop table student;#刪除原先存在的student數據表#創建表頭為 id,name,age,enroll_date的數據表create table student(id int not null auto_increment,name char(32),age int,enroll_date date,primary key(id));
數據表的增加:
insert into student(name,age,enroll_date)values(陳顥,54,2008-9-01);insert into student(name,age,enroll_date)values(晁雅熙,27,2014-9-01);insert into student(name,age,enroll_date)values(王淑艷,25,2015-9-01);insert into student(name,age,enroll_date)values(魏家強,18,2016-9-01);insert into student(name,age,enroll_date)values(高志遠,23,2017-9-01);insert into student(name,age,enroll_date)values(崔曉娟,23,2017-9-01);
數據表的查詢:
數據表數據的查詢語句為:select column_name,column_namefrom table_name[where clause][offset M][limit N]示例:select * from student where name = 魏家強;select * from student where age > 23; select * from student where age < 25 and id > 3 and name = 魏家強;select * from student where name = 魏家強 or name = 高志遠;
數據表的修改:
數據表修改語句:update table_name set field1=new-value1,field2=new-value2 [where clause]示例:update student set age = 25 where id = 1;update student set name = 李培海,age = 19 where id =1;
數據表的刪除:
delete from table_name[where clause]delete from student where name = 李培海;
2. 對錶結構的操作
#添加列alter table student add address varchar(60) after age;#修改列alter table student change address addr char(60);#刪除列alter table student drop addr;#重命名表alter table student rename students;#清空數據後讓id從1開始自增truncate table students;#清空數據後不改變自增結果,行刪除delete from students;
3. 刪除資料庫和表
drop table 表名;#刪除表drop database 資料庫名;#刪除資料庫
4.MySQL 常用的命令
##連接到MySqlmysql -u root -p #命令行進入資料庫,顯示密碼輸入遠程主機IP 為10.110.18.120,用戶名為root,密碼為123:mysql-h 10.110.18.120 -u root -p 123;##修改密碼mysqladmi-u 用戶名 -p 舊密碼 password 新密碼##添加新用戶命令格式:grant 許可權1,許可權2,...許可權n on 資料庫名稱.數據表名 to 用戶名@用戶地址 identified by 密碼;mysql>grant select,insert,update,delete,create,drop on company.employee to wei@10.163.123.87 identified by 123;##顯示資料庫show databases;##備份資料庫#格式:mysqldump -h 主機名 -p埠 -u 用戶名 -p 密碼 -database 資料庫名表名>文件名.sql
pymysql 模塊的使用
資料庫的連接
connection = pymysql.connect(host=localhost,user=root,passwd=,db=,port=3306,charset=utf8)cursor = connection.cursor()execute()executemany()close()fetchone()fetchmany()fetchall()
創建數據表:
cursor.execute(drop table if exists student)sql = create table student(id int not null auto_increment,name char(32),age int,enroll_date date,primary key(id));cursor.execute(sql)
數據表的插入:
sql = insert into student(name,age,enroll_date)values(陳顥,54,2008-9-01);insert into student(name,age,enroll_date)values(晁雅熙,27,2014-9-01);insert into student(name,age,enroll_date)values(王淑艷,25,2015-9-01);insert into student(name,age,enroll_date)values(魏家強,18,2016-9-01);insert into student(name,age,enroll_date)values(高志遠,23,2017-9-01);insert into student(name,age,enroll_date)values(崔曉娟,23,2017-9-01);try: cursor.execute(sql) conn.commit()#將操作結果提交到資料庫except: conn.rollback()#如果操作失敗將會回滾到原來的位置conn.close()#關閉資料庫庫的操作r#最好是進行如下操作,操作完必須commit 操作cursor.execute(insert into student(name,age,enroll_date)values(%s,%s,%s),(魏家強,18,2016-9-01))cursor.executemany(insert into student(name,age,enroll_date)values(%s,%s,%s),[(魏家強,18,2016-9-01),(陳顥,54,2008-9-01)])connection.commit()connection.rollback()#出現錯誤可以回滾
MongoDB資料庫的基本使用
use wei #沒有將創建資料庫名稱show dbs #顯示所有萼資料庫,沒有數據將不會顯示db.dropDatabase()#刪除當前的資料庫#數據的插入db.wei.insert({url:http://www.123.com})#插入數據#數據的查詢db.pyhton.find({likes:100}).pretty()#等於db.python.find({"likes":{$lt:100}}).pretty()#小於db.python.find({"likes":{$lte:100}}).pretty()#小於或等於db.python.find({"likes":{$gt:100}}).pretty()#大於db.python.find({"likes":{$gte:100}}).pretty()#大於或等於db.python.find({"likes":{$ne:100}}).pretty()#不等於db.python.find({"likes":{$gte:100},"title":"python"}).pretty()#組合條件的查詢db.python.find({$or:[{"likes":{$gte:100}},{"title":"python"}]}).pretty()#關鍵字or以及配合and的使用db.python.update({title:pyhton},{$set:{title:python}},{multi:true})#修改多條文檔db.python.remove({title:MongoDB})#刪除文檔python 操作MongoDB##建立連接client = pymongo.MongoClient()client = pymongo.MongoClient(localhost,27017)client =pymongo.MongoClient(mongodb://localhost:27017)#獲取資料庫mydb = client[mydb]blogs = mydb[blogs]#插入文檔,也可以插入一個可以迭代的文檔item = {my:your}blogs.insert(item)#查詢文檔blogs.find_one({:}).count()#多少條文件符合條件#修改文檔blogs.update({:},{"$set":{"":""}})#刪除文檔blogs.remove({:})
將爬取到的數據保存到MySQL資料庫中
爬取豆瓣電影top250的數據並且保存到資料庫中
點擊下一頁可以發現 url 中變為start=25,再將start=0構造出來發現正是第一頁的內容
由此我們來構造所有頁面的url
我們要獲得每個電影的詳細url 頁面並且獲得電影的相關信息
爬取的內容有:電影名稱、導演、劇本、演員
urls = [https://movie.douban.com/top250?start={}&filter=.format(str(i)) for i in range(0,250,25) ]
完整的爬蟲代碼:
import requestsfrom bs4 import BeautifulSoupfrom lxml import etreeimport pymysqlimport time#charset = utf8 一定要使用,不然數據在MysqlFront 客戶端可視化時會出現亂碼conn = pymysql.connect(localhost,root,WEIJIAQIANG,wei_test,charset=utf8)cursor = conn.cursor()headers = {User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)}def get_url(url): re = requests.get(url,headers=headers) re.encoding = utf-8 selector = etree.HTML(re.text) all_hrefs = selector.xpath(//div[@class="hd"]/a/@href) for all_href in all_hrefs: get_infos(all_href)def get_infos(url): re = requests.get(url,headers=headers) selector = etree.HTML(re.text) try: title = selector.xpath(//div[@id="content"]/h1/span[1]/text())[0] director = selector.xpath(//div[@id="info"]/span[1]/span[2]/a/text())[0] scriptwrite = selector.xpath(//div[@id="info"]/span[2]/span[2]/a/text())[0] #標籤的嵌套要用 string(.) 來解決 actors = selector.xpath(//div[@id="info"]/span[3]/span[2])[0] actor = actors.xpath(string(.)) #爬取的結果插入到數據表中 cursor.execute("insert into doubanmovie(title,director,scriptwrite,actor) values(%s,%s,%s,%s)",(str(title),str(director),str(scriptwrite),str(actor))) #去掉爬取結果出現問題的 IndexError except IndexError: passif __name__ == __main__: urls = [https://movie.douban.com/top250?start={}&filter=.format(str(i)) for i in range(0,250,25) ] for url in urls: get_url(url) time.sleep(2) conn.commit()
結果用MySQL Front 軟體來查看:
用到的爬蟲模塊有:
- import requests
- from lxml import etree
- import time
- import pymysql
- from bs4 import BeautifulSoup
推薦閱讀:
※基於cookie登錄爬取豆瓣舌尖短評信息並做詞雲分析
※python爬取QQ音樂
※爬蟲的小技巧之–如何尋找爬蟲入口
※Python爬蟲:抓取今日頭條圖集
※回顧一個月的爬蟲學習