我爬取了市面上所有的Python書|想知道幾件事
這是菜鳥學Python的第97篇原創文章
閱讀本文大概需要3分鐘
前面講了好幾篇SQL的文章,熟悉我的文章的小夥伴都知道,一般寫一個系列,寫完一個小階段,我都會實戰寫一個例子綜合運用一下。正好最近一些出版社跟我聯繫關於Python書的事情,Python的書其實我看過不少,於是我非常好奇,想知道出版社哪家最強。於是乾脆想探索一下市面上所有的Python書,然後分析一下出個報告,說干就干吧~~
1.思路篇
1).我大概花了一個晚上的時間,幾乎一動不動的碼了3個小時(熱的T恤都粘在背上了),爬取了某知名的網站上所有的Python的書, 總共大概有1300多本,因為有一些是重複的,剔除重複的大概還有1200多本
2).接著把這些書的數據,進行清洗,數據的清洗其實是最繁瑣的,也是最耗時的步驟,算是整個數據分析裡面的重頭戲。我算了一下我的數據清洗這一步,花了很大的時間,這一步會遇到很多七七八八的煩心事~~
3).然後按照一定的規則寫入到CSV文件,當然也可以寫成json文件的格式,因為我想做一個SQL的實戰運用,所以我暫時寫成CSV文件,方便存入SQL資料庫
4).最後數據的分析,我們從SQL資料庫中,查詢各種各樣的組合條件,具體我想知道信息下面慢慢道來.
2.想知道的秘密
1200多本書,我們想探索哪些秘密呢:
哪家出版社出版的Python書最多
哪本Python書的評分最高,都分布在哪些出版社
哪本Python數的閱讀數最高
評分高的Python書,是不是閱讀數一定很高,有多少人評分的,這兩個數據有沒有什麼秘密隱藏在裡面
Python書的頁數和價格,還有評分,之間有沒有什麼關係,市面上賣的好的書,評分9分以上的書,都有哪些特徵
在這1200本Python書中,那一年出版發行的python書最多
3.技術篇
1).技術上感覺難度應該不大,我們首先爬取某網站上的所有Python的書的所有的鏈接
2).然後分析每一本書的鏈接,我們希望解析的信息如下:
我們要提取作者/出版社/譯者/出版年/頁數/定價/ISBN/評分/評價人數
代碼爬出的數據,經過處理,格式如下:
author : DavidM.Beazley/BrianK.Jones
book : Python Cookbook 中文版,第3版
isdn : 9787115379597
page : 684
price : 108.0
pub_company : 人民郵電出版社
pub_date : 2015-5-1
rating_people : 51
translator : 陳舸
url : https://book.douban.com/subject/26381341/
vote_num : 8.9
3).爬蟲
爬蟲可以選擇的技術有很多種,你可以自己寫多線程去爬,可以用scrapy去爬,或者自己寫一個小的框架去爬,這個只是一個途徑而已
爬蟲的難點,主要是在分析目標的網站的格式,我寫完這個項目的時候,發現最大的坑在於,Python的書的html格式會不一樣:
作者html格式一
作者html格式二
- 大家有沒有發現什麼不同,要提取作者的信息不難,難在有的書它的作者是嵌套在<span>下面的<a>裡面,而有的書的作者是直接跟在<span>後面的Navstring裡面
- 那麼一套爬蟲代碼需要在解析的時候,兼容兩種html格式的爬取,這個會是一個難點
4).寫入CSV文件,因為量不是很大,只有1000多條數據,所以開銷我們不用在乎,只需要當心保存數據的格式都是對的。特別是當心預設數據,比如有的書是用譯者,有的沒有;如果沒有預設值,這樣寫入CSV的時候,數據容易遺漏,跟CSV的頭文件對齊會有問題.
5).資料庫的查詢
我們用SQL查詢比較簡單,我們可以把所有的數據做成一個表格,也可以把重要的信息,比如 書名,出版社,評分,ISDN單獨弄成一個表格,用ISDN作為主的id key.
4.一些注意事項
除了上面提到的作者的html格式問題之外,還有幾個地方要注意
1).字元編碼的問題這些書名,有的是中文,有的是英文,,也就是說有的ASCII,有的uncode,在寫入CSV文件的時候需要考慮編碼的轉換,即使你考慮到了轉換,還有一個問題,就是有一些數據是int,而int是無法encode的,怎麼辦,比如把0變成0這樣的類似問題
2).數據格式不一致
- 比如有的書,有譯者,有的沒有,這樣的話你就要考慮預設值
- 比如有的書,有評價人數,有的顯示評價人數不足,需要手動轉換
- 比如書的價格:有的是USD 用美金計算,有的是人民幣計算,而且寫的格式也不一樣,需要統計的轉換,這樣最後分析那本書價格最高比較好獲取
- 日期問題,有一些是純數字2008-11-1,有一些是數字和漢字結合的比如2010-7月,還有一些只有年份
- 評價人數,不是只是簡單的數字,而是數字和中文字元夾在一起,比如"204人評價"
數據清洗是數據分析裡面非常重要的一個環節,而且是最耗精力和時間的,佔60%的比重,數據不一致也是家常便飯,我們需要仔細清洗哦
整個項目我基本已經完成了70%,還有一小塊需要完善優化一下,先睹為快吧
歡迎大家關注 菜鳥學Python",更多好玩有趣的Python原創教程,趣味演算法,經驗技巧,行業動態,盡在菜鳥學Python,一起來學python吧
歷史人氣文章
Python語言如何入門
Python寫個迷你聊天機器人|生成器的高級用法
同學,學Python真的不能這樣學
全網爬取6500多隻基金|看看哪家基金最強
用Python破解微軟面試題|24點遊戲
一道Google的演算法題 |Python巧妙破解
推薦閱讀:
※20170430 pandas入門
※Flask+Echarts 實現動圖圖表
※Python · 元類(Meta Class)及其應用
TAG:Python |