使用Python爬百度閱讀(並推薦本書)

編程語言 百度閱讀 Python JSON 勰門歪道 2017-06-02

使用Python爬百度閱讀(並推薦本書)

在「百度閱讀」上購買了一本《創新公司:皮克斯的啟示》電子書,但坑爹的發現百度閱讀 APP 的體驗實在渣。於是就想看看是不是可以把電子書爬下來,放到 kindle 裡面讀。

一開始以為這本書就是睡前讀物,沒讀一會就發現這貨絕對是管理方法乾貨,尤其是對需要創造性的團隊管理。

使用Python爬百度閱讀(並推薦本書)

創新公司:皮克斯的啟示 , [美] 艾德·卡特姆 / 埃米·華萊士 著 , 靳婷婷 譯 , 中信出版社 , 2015 年 2 月


接下來進入正題,如何使用 Python 爬取「百度閱讀」中的內容。

環境準備

  • Python 2.7.6:我偷懶用的是 MacBook Pro 系統自帶的版本;

  • requests 庫: 用於獲取「百度閱讀」返回的數據(安裝傳送門點擊文末閱讀原文)。


抓取過程

整個過程大概分三個部分:

  • 抓取數據

  • 解析數據

  • 組裝存儲數據

1 抓取數據

一開始我想簡單了,以為「百度閱讀」的數據都是寫在靜態頁面裡的(如果不是低估這個事情的複雜度,我應該就不會做這個事情了)。然後查看源碼一看傻眼了,小說的數據是異步加載過來的。

我 Google 了好一陣技能:

在 Chrome 中用 contrl + command + i 打開「開發者工具」,切換到 network 下刷新「百度閱讀」,逐一查看 XHR 和 script 兩個類。

在 script 分類下有個 jsonp 請求是小說內容,請求的地址是:

http://wenku.baidu.com/content/49422a3769eae009581becba?m=8ed1dedb240b11bf0731336eff95093f&type=json&cn=1&_=1&t=1423309200&callback=wenku7

如果把地址裡面的 callback=wenku7 去掉,返回的就是一個 json 字符串,這樣解析起來就簡單多了。

2 解析數據

get 到這些信息後,就可以利用 requests 獲取 json 數據,把數據打印處理研究後發現,json 的節點主要是 t 屬性 和 c 屬性,t 屬性是用來定義 html 標籤的,例如 div 、 p、 h 等等。而電子書的內容都在 c 屬性內。

但 C 屬性的值有兩種類型,一種就是電子書內容,另一種則是另一個列表,裡面又包含了 t 屬性和 c 屬性(嵌套關係)。

對於這種簡單的嵌套關係關係使用遞歸函數基本就解決了。

3 組裝存儲數據

解析完 json 的結構,直接用 file.write() 講電子書的內容保存為本地的 .txt 文件。然後再用一個比較好用的電子書轉換工具:「calibre」,將.txt 文件轉成 .mobi 和 .epub 格式。

至此整個過程就結束了,完整的代碼如下(因為隱私原因隱藏了 cookie 信息)。

#coding: utf8

小結

  • 代碼基本是以實用主義出發了,是能用就行,後面遇到實用過程中問題再急需優化。

  • 慣例:需要《創新公司》電子書,可以到公號:「勰門歪道」回覆 創新公司 獲取;


推薦閱讀:公眾號如何做到0.16RMB一個新增用戶

上篇文章:我們為什麼讀書?| 推薦三本書

相關推薦

推薦中...