接着前天的豆瓣書單信息爬取,這一篇文章看一下利用pandas完成對數據的存儲。python
回想一下咱們當時在最後獲得了六個列表:img_urls, titles, ratings, authors, details。sql
咱們如何對這些數據進行存儲:讓每一本書的每個元素能夠一一對應起來,造成第一本書的書名、做者等等在一塊兒,下一本書的書名、做者在一塊兒。數據庫
這裏咱們接觸一個新的數據存儲形式:pandas庫裏的DataFrame。數據結構
pandas.DataFrame()編碼
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列能夠是不一樣的值類型(數值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它能夠被看作由Series組成的字典(共用同一個索引)。跟其餘相似的數據結構相比(如R的data.frame),DataFrame中面向行和麪向列的操做基本上是平衡的。其實,DataFrame中的數據是以一個或多個二維塊存放的(而不是列表、字典或別的一維數據結構)。url
看下列代碼↓spa
1 import pandas as pd 2 result = pd.DataFrame() 3 authors=['file','edit','format','run','options'] 4 numbers=[1,2,3,4,5] 5 result['authors']=authors 6 result['numbers']=numbers
咱們獲得的 result,這個DataFrame對象會長這個樣子:excel
>>> result
authors numbers
0 file 1
1 edit 2
2 format 3
3 run 4
4 options 5
它看上去是否是真的很像 excel !code
並且若是若是兩列數據量不一樣,好比上面的authors有5個值,而numbers卻有6個值就會報錯Length of values does not match length of index。
orm
用DataFrame對數據進行.csv存儲
進入正題,看看咱們如何對爬蟲的數據進行存儲:
1 import pandas as pd 2 result = pd.DataFrame() 3 result['img_urls'] = img_urls 4 result['titles'] = titles 5 result['ratings'] = ratings 6 result['authors'] = authors 7 result['details'] = details 8 result.to_csv('result.csv',index=None)
>>> result
titles ratings authors
0 白日漫遊 8.2 遠子/廣西師範大學出版社/2019-5
1 不識字的人 9.1 [匈]雅歌塔·克里斯多夫/上海人民出版社/2019-4
2 苔 8.6 周愷/楚塵文化/中信出版集團/2019-5
3 推理時鐘 8.7 [日]貴志祐介/新星出版社/2019-5-1
4 本店招牌菜 9.6 [美]斯坦利·艾林/新星出版社/2019-4
5 格雷厄姆·格林短篇小說全集 評價人數不足 [英]格雷厄姆·格林/外語教學與研究出版社/2019-4
6 大樹小蟲 8.8 池莉/江蘇鳳凰文藝出版社/2019-5
7 澤諾的意識 評價人數不足 [意]伊塔洛·斯韋沃/後浪丨四川人民出版社/2019-5
8 纔不要讓你知道 9.4 方小孬/浙江人民美術出版社/2019-4
9 女鼓手 評價人數不足 [英]約翰·勒卡雷/上海譯文出版社/2019-4-1
10 四月在愚人船 8.2 曾錚/武漢大學出版社/2019-5-1
這裏選取了前十行。雖然DataFrame不會對本身進行排版,但咱們仍依稀可見它的存儲形式:將列表存爲一列,列名是列表名。
img_urls,titles,ratings,authors,details https://img3.doubanio.com/view/subject/m/public/s32289202.jpg,白日漫遊,8.2,遠子/廣西師範大學出版社/2019-5,青年做家遠子最新力做,以十四篇彼此獨立而又互有呼應的短篇小說,刻畫在大都市掙扎求生的年輕人,描述一種渴望自由而又無往不在枷鎖之中的生活狀態。 https://img1.doubanio.com/view/subject/m/public/s32281237.jpg,不識字的人,9.1,[匈]雅歌塔·克里斯多夫/上海人民出版社/2019-4,28個虛構故事和1部自傳體小說。《惡童日記》做者雅歌塔流亡記憶的隱祕迴響,冷峻精簡的語言質感,道盡暗涌的記憶與真實的人生痛感。 https://img1.doubanio.com/view/subject/m/public/s32323469.jpg,苔,8.6,周愷/楚塵文化/中信出版集團/2019-5,一個晚清家族,一出袍哥傳奇,一場歷史風暴,一曲時代輓歌。在「三千年未有之大變局」下,再現了蜀中各個階層的人物命運。 https://img1.doubanio.com/view/subject/m/public/s32295228.jpg,推理時鐘,8.7,[日]貴志祐介/新星出版社/2019-5-1,貴志祐介的推理短篇小說集,共分爲四個短篇,主要描寫了偵探榎本與犯罪者的頭腦戰。本格密室推理佳做,在日本年度推理榜單上多次上榜。 https://img1.doubanio.com/view/subject/m/public/s32285169.jpg,本店招牌菜,9.6,[美]斯坦利·艾林/新星出版社/2019-4,美國懸疑大師斯坦利•艾林的十六篇短篇小說。 https://img1.doubanio.com/view/subject/m/public/s32322848.jpg,格雷厄姆·格林短篇小說全集,評價人數不足,[英]格雷厄姆·格林/外語教學與研究出版社/2019-4,格雷厄姆·格林一輩子全部的短篇做品,或諷刺乖張,或冷漠怪異,貫穿着格林特有的人性思考與道德拷問,跳動着格林做品特有的節奏感。 https://img3.doubanio.com/view/subject/m/public/s32284301.jpg,大樹小蟲,8.8,池莉/江蘇鳳凰文藝出版社/2019-5,這一場看似門當戶對、一見傾心的自由戀愛,倒是衆人指揮若定、通力配合的精密部署。兩我的的結合,兩個家族的聯姻,延展出三代人近百年的跌宕命運。 https://img1.doubanio.com/view/subject/m/public/s32311017.jpg,澤諾的意識,評價人數不足,[意]伊塔洛·斯韋沃/後浪丨四川人民出版社/2019-5,首次將精神分析運用到文學做品裏的意大利心理小說,深入影響喬伊斯《尤利西斯》的創做。 https://img3.doubanio.com/view/subject/m/public/s32279850.jpg,纔不要讓你知道,9.4,方小孬/浙江人民美術出版社/2019-4,有些可愛的、沒法用言語表述的當心動,在腦中像一幕幕電影片斷,有細微的表情變化和誰也聽不見的心跳。這部做品但願能用畫筆記錄這須臾的美好。 https://img3.doubanio.com/view/subject/m/public/s32278296.jpg,女鼓手,評價人數不足,[英]約翰·勒卡雷/上海譯文出版社/2019-4-1,以色列間諜機構爲了刺殺巴勒斯坦恐怖分子哈利勒,招募了一位激進的左翼英國女演員查莉。查莉的良心在兩個民族之間搖擺不停,道德觀也已被撕扯成碎片。
可見csv文件直接把result原封不動地存成了文本文件,添加了逗號+沒打印index。雖然粗暴,可是有用!DataFrame()+to_csv()方法很好的完成了咱們的任務。
csv文件在excel中打開出現了中文編碼問題,再加上這週二在python課上遇到的python2在sqlite3中輸出亂碼的問題,我必定要搞出個結果。暫時的感受是:encode沒有問題,問題出在了decode上。python2在寫腳本時第一行加上utf-8按理就不會再出現encode的問題,utf-8會根據unicode把全部中文字符化做十六進制,這樣就能以二進制的形式存儲在數據庫裏,因此到這裏都沒問題。猜想sqlite3的輸出沒有再對二進制的中文正確解碼,須要添加decode參數就能解決亂碼問題。