Python爬取豆瓣Top250并可視化(四) —— 保存數(shù)據(jù)到數(shù)據(jù)庫(kù) —— Mysql
保存爬蟲數(shù)據(jù)到數(shù)據(jù)庫(kù),某常用的是mysql,而不是sqlite,所以追加一篇保存到mysql數(shù)據(jù)庫(kù)的筆記。
mysql數(shù)據(jù)庫(kù)對(duì)于個(gè)人網(wǎng)站來(lái)說(shuō),還是比較友好的,這里搭建在本地,用到的是集成環(huán)境WAMP,思路的話查看關(guān)于Python與mysql的基本用法。直接上代碼:
腳本運(yùn)行完后保存到數(shù)據(jù)庫(kù)的截圖:

幾點(diǎn)注意:
1,數(shù)據(jù)庫(kù)服務(wù)器搭建好后,創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,可以用LAMP環(huán)境下的phpmyadmin可視化管理數(shù)據(jù)庫(kù),也可以用navicat,但是兩種可視化創(chuàng)建數(shù)據(jù)庫(kù)的途徑,一定要注意編碼,用phpmyadmin的編碼最好選utf8_general_ci, 而navicat的編碼為utf8 -- UTF-8 Unicode;
2,提取網(wǎng)頁(yè)爬取數(shù)據(jù)的時(shí)候,這里數(shù)據(jù)量比較小,所以用一個(gè)datalists就包含了,如果比較多的話,可以邊爬邊保存,直接在get_data()函數(shù)里進(jìn)行保存;
3,構(gòu)造sql語(yǔ)句的時(shí)候,插入語(yǔ)句的值是根據(jù)設(shè)定的數(shù)據(jù)類型而有所不同的,比如是數(shù)值型的,在構(gòu)造sql的時(shí)候,就不要雙引號(hào);
4,與sqlite相同的是,創(chuàng)建表的時(shí)候,如果設(shè)定了自增主鍵(一般為id),那么插入數(shù)據(jù)的時(shí)候,是可以忽略自增主鍵的;
5,注意pymysql和sqlite在語(yǔ)法上的不同,創(chuàng)建表時(shí),如主鍵id需要自增長(zhǎng),sqlite的寫法是autoincrenment,而mysql的寫法是auto_increment;
6,函數(shù)save_to_mysql_database()有兩個(gè)需要注意,一個(gè)是用構(gòu)造sqls時(shí)候,要提取data里的每項(xiàng)值data[index]然后再加雙引號(hào)賦值給原來(lái)的data[index],for循環(huán)和sqls的位置;第二個(gè)是外層for循環(huán),提交數(shù)據(jù)庫(kù)更改的時(shí)候,conn.commit(),一定是要與外層for循環(huán)的for對(duì)齊。
打完收工。處理數(shù)據(jù)庫(kù),需要很多耐心,很多調(diào)試,特別是與爬蟲結(jié)合的時(shí)候,要爬的服務(wù)器可能隨時(shí)拒絕服務(wù),所以倡議做爬蟲的時(shí)候,盡量用最少的請(qǐng)求做完,給原服務(wù)器減壓。
申明:本文僅供學(xué)習(xí)交流使用。如有侵權(quán),請(qǐng)聯(lián)系我刪除。感謝。