小編給大家分享一下Python3爬蟲實戰(zhàn)mitmdump爬取App電子書信息的操作流程,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
為江干等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及江干網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、江干網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
mitmdump 爬取 “得到” App 電子書信息
“得到” App 是羅輯思維出品的一款碎片時間學(xué)習(xí)的 App,其官方網(wǎng)站為 https://www.igetget.com,App 內(nèi)有很多學(xué)習(xí)資源。不過 “得到” App 沒有對應(yīng)的網(wǎng)頁版,所以信息必須要通過 App 才可以獲取。這次我們通過抓取其 App 來練習(xí) mitmdump 的用法。
1. 爬取目標(biāo)
我們的爬取目標(biāo)是 App 內(nèi)電子書版塊的電子書信息,并將信息保存到 MongoDB,如圖 11-30 所示。
我們要把圖書的名稱、簡介、封面、價格爬取下來,不過這次爬取的側(cè)重點還是了解 mitmdump 工具的用法,所以暫不涉及自動化爬取,App 的操作還是手動進(jìn)行。mitmdump 負(fù)責(zé)捕捉響應(yīng)并將數(shù)據(jù)提取保存。
2. 準(zhǔn)備工作
請確保已經(jīng)正確安裝好了 mitmproxy 和 mitmdump,手機(jī)和 PC 處于同一個局域網(wǎng)下,同時配置好了 mitmproxy 的 CA 證書,安裝好 MongoDB 并運(yùn)行其服務(wù),安裝 PyMongo 庫,具體的配置可以參考第 1 章的說明。
3. 抓取分析
首先探尋一下當(dāng)前頁面的 URL 和返回內(nèi)容,我們編寫一個腳本如下所示:
def response(flow): print(flow.request.url) print(flow.response.text)
這里只輸出了請求的 URL 和響應(yīng)的 Body 內(nèi)容,也就是請求鏈接和響應(yīng)內(nèi)容這兩個最關(guān)鍵的部分。腳本保存名稱為 script.py。
接下來運(yùn)行 mitmdump,命令如下所示:
mitmdump -s script.py
打開 “得到” App 的電子書頁面,便可以看到 PC 端控制臺有相應(yīng)輸出。接著滑動頁面加載更多電子書,控制臺新出現(xiàn)的輸出內(nèi)容就是 App 發(fā)出的新的加載請求,包含了下一頁的電子書內(nèi)容??刂婆_輸出結(jié)果示例如圖 11-31 所示。
圖 11-31 控制臺輸出
可以看到 URL 為 https://dedao.igetget.com/v3/discover/bookList 的接口,其后面還加了一個 sign 參數(shù)。通過 URL 的名稱,可以確定這就是獲取電子書列表的接口。在 URL 的下方輸出的是響應(yīng)內(nèi)容,是一個 JSON 格式的字符串,我們將它格式化,如圖 11-32 所示。
圖 11-32 格式化結(jié)果
格式化后的內(nèi)容包含一個 c 字段、一個 list 字段,list 的每個元素都包含價格、標(biāo)題、描述等內(nèi)容。第一個返回結(jié)果是電子書《情人》,而此時 App 的內(nèi)容也是這本電子書,描述的內(nèi)容和價格也是完全匹配的,App 頁面如圖 11-33 所示。
圖 11-33 APP 頁面
這就說明當(dāng)前接口就是獲取電子書信息的接口,我們只需要從這個接口來獲取內(nèi)容就好了。然后解析返回結(jié)果,將結(jié)果保存到數(shù)據(jù)庫。
4. 數(shù)據(jù)抓取
接下來我們需要對接口做過濾限制,抓取如上分析的接口,再提取結(jié)果中的對應(yīng)字段。
這里,我們修改腳本如下所示:
import json from mitmproxy import ctx def response(flow): url = 'https://dedao.igetget.com/v3/discover/bookList' if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) books = data.get('c').get('list') for book in books: ctx.log.info(str(book))
重新滑動電子書頁面,在 PC 端控制臺觀察輸出,如圖 11-34 所示。
圖 11-34 控制臺輸出
現(xiàn)在輸出了圖書的全部信息,一本圖書信息對應(yīng)一條 JSON 格式的數(shù)據(jù)。
5. 提取保存
接下來我們需要提取信息,再把信息保存到數(shù)據(jù)庫中。方便起見,我們選擇 MongoDB 數(shù)據(jù)庫。
腳本還可以增加提取信息和保存信息的部分,修改代碼如下所示:
import json import pymongo from mitmproxy import ctx client = pymongo.MongoClient('localhost') db = client['igetget'] collection = db['books'] def response(flow): global collection url = 'https://dedao.igetget.com/v3/discover/bookList' if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) books = data.get('c').get('list') for book in books: data = {'title': book.get('operating_title'), 'cover': book.get('cover'), 'summary': book.get('other_share_summary'), 'price': book.get('price') } ctx.log.info(str(data)) collection.insert(data)
重新滑動頁面,控制臺便會輸出信息,如圖 11-35 所示。
圖 11-35 控制臺輸出
現(xiàn)在輸出的每一條內(nèi)容都是經(jīng)過提取之后的內(nèi)容,包含了電子書的標(biāo)題、封面、描述、價格信息。
最開始我們聲明了 MongoDB 的數(shù)據(jù)庫連接,提取出信息之后調(diào)用該對象的 insert() 方法將數(shù)據(jù)插入到數(shù)據(jù)庫即可。
滑動幾頁,發(fā)現(xiàn)所有圖書信息都被保存到 MongoDB 中,如圖 11-36 所示。
目前為止,我們利用一個非常簡單的腳本把 “得到” App 的電子書信息保存下來。
看完了這篇文章,相信你對Python3爬蟲實戰(zhàn)mitmdump爬取App電子書信息的操作流程有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)站欄目:Python3爬蟲實戰(zhàn)mitmdump爬取App電子書信息的操作流程
網(wǎng)站地址:http://muchs.cn/article8/iegjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、App設(shè)計、域名注冊、做網(wǎng)站、服務(wù)器托管、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)