標籤:

我爬取了市面上所有的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 : book.douban.com/subject

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 |