今天向大家介紹app爬取。
文章目錄
- 一:爬取主要流程簡述
- 二:抓包工具Charles
- 1.Charles的使用
- 2.安裝
- (1)安裝鏈接
- (2)須知
- (3)安裝后
- 3.證書配置
- (1)證書配置說明
- (2)windows系統(tǒng)安裝證書配置
- (3)Android手機安裝證書配置
- 4.開啟SSL監(jiān)聽
- 5.原理
- 6.抓包
- 三:抓包工具mitmproxy(免費的)
- 1.簡介
- 2.關聯(lián)組件
- 3.安裝和證書配置
- (1)用pip安裝
- (2)在GitHub或官網上安裝
- 3.證書配置
- (1) 產生CA證書
- 4.抓包原理
- 5.設置代理
- (1)啟動代理服務
- (2)設置當前代理
- 6.抓包
- 7.mitmproxy的高級功能mitmdump
- (1)簡單獲取數據(隨便一個app)
- (2)可以指定一個腳本來處理截獲的數據:
- (3)日志輸出
- (4)輸出請求數據
- (5)獲得響應
- 四:利用mitmproxy進行app數據獲取
- 1.獲取請求url
- 2.接口url文件
- 3.爬取json
一:爬取主要流程簡述
1.APP的爬取比Web爬取更加容易,反爬蟲沒有那么強,且大部分數據是以JSON形式傳輸的,解析簡單。
2.在APP中想要查看請求與響應(類似瀏覽器的開發(fā)者工具監(jiān)聽到的各個網絡請求和響應),就需要借助抓包軟件。
3.在抓取之前,需要設置代理將手機處于抓包軟件的監(jiān)聽下,就可以用同一網絡進行監(jiān)聽,獲得所有的網絡和請求。
4.如果是有規(guī)則的,就只需要分析即可;如果沒有規(guī)律,就可以用另一個工具mitmdump對接Python腳本直接處理Response。
5.抓取肯定不能由人手動完成,還需要做到自動化,還要對App進行自動化控制,可以用庫Appium。
二:抓包工具Charles
1.Charles的使用
? ?Charles是一個網絡抓包工具,比Fiddler功能更強大,可以進行分析移動App的數據包,獲取所有的網絡請求和網絡內容
2.安裝
(1)安裝鏈接
? ?官網:https://www.charlesproxy.com
(2)須知
? ?charles是收費軟件,但可以免費試用30天。試用期過了,還可以試用,不過每次試用不能超過30分鐘,啟動有10秒的延遲,但大部分還可以使用。
(3)安裝后
3.證書配置
(1)證書配置說明
? ?現在很多網頁都在向HTTPS(超文本傳輸協(xié)議的加密版,即HTTP加入SSL層),經過SSL加密更加安全,真實,大部分都由CA機構頒發(fā)安全簽章(12306不是CA機構頒發(fā),但不被信任)。現在應用HTTPS協(xié)議的App通信數據都會是加密的,常規(guī)的截包方法是無法識別請求內部的數據的。
? ?要抓取APP端的數據,要在PC和手機端都安裝證書。
(2)windows系統(tǒng)安裝證書配置
? ?打開Charles,點擊Help->SSL Proxying->Install Charles Root Certificate,進入證書的安裝頁面:
? ?點擊安裝證書,就會打開證書安裝向導,然后點擊下一步,此時需要選擇證書的存儲區(qū)域,選擇第二個選項”將所有證書放入下列存儲”:
? ?然后點擊瀏覽,選擇證書存儲位置為”受信任的根證書頒發(fā)機構”,點擊確認并進入下一步:
(3)Android手機安裝證書配置
手機與電腦連接同一個WiFi。
設置如下:
可以用操作系統(tǒng)命令ipconfig查看PC端ip:
? ?為10.61.131.172,默認代理端口號為8888。之后代理服務器為電腦的IP地址。端口為8888。設置如下:
會發(fā)現360手機的標志
接下來對手機下載證書:
訪問手機訪問 chls.pro/ssl ,下載證書:
? ?此時下載的是個.pem 格式的。需要手動更改為.crt 格式,最后隨便放進某個文件夾即可:
用手機(我用的360手機)設置里的安全,找到從存儲設備安裝找到該crt文件進行配置:
此時需要設置鎖屏:
就可以完成證書的安裝。
4.開啟SSL監(jiān)聽
? ?點擊Proxy->SSLProxying Settings,在彈出的窗口中點擊Add按鈕,添加需要監(jiān)聽的地址和端口號。需要監(jiān)聽所有的HTTPS請求,可以直接將地址和端口設置為*,即添加*:*設置,就可以抓取所有的HTTPS請求包;如果不配置,抓取的HTTPS請求包狀態(tài)可能是unknown。
這樣就指定只監(jiān)聽我們需要的ip和端口的請求和響應。
5.原理
? ?Charles運行時會在PC端的8888開啟一個代理服務,實際上是一個HTTP/HTTPS的代理。
? ?可以是用手機通過相同的無線網絡連接(這里用的是校園網),設置手機代理為Charles的代理地址,這樣手機訪問互聯(lián)網的數據就會經過Charles抓包工具,Charles轉發(fā)這些數據到真實的服務器,再轉發(fā)到手機中。這樣抓包工具(Charles)就起到了中間人的作用,還有權對請求和響應進行修改。
6.抓包
? ?我們可以看到我們已經請求了很多數據了,點擊左上角的掃帚按鈕即可清空捕獲到的所有請求,然后點擊第二個監(jiān)聽按鈕,表明Charles正在監(jiān)聽App的網絡數據流。如下:
抓包后可以看到音樂:
? ?可以通過分析不同的URL請求,獲得數據,也可以通過修改數據,得到那些參數是需要的。
? ?這是有規(guī)則的,無規(guī)則的如果沒有規(guī)律的url,就可以用另一個工具mitmdump對接Python腳本直接處理Response。
三:抓包工具mitmproxy(免費的)
1.簡介
? ?mitmproxy是一個支持HTTP和HTTPS的抓包程序,有類似Fiddler和Charles的功能,但它是一個控制臺的形式操作。
2.關聯(lián)組件
? ?mirmproxy還有兩個關聯(lián)組件。一個是mitmdump,是命令行接口,可以對接Python腳本,用Python處理數據;另一個是mitmweb,是一個web程序,可以清楚地查看mitmproxy捕獲的請求。
3.安裝和證書配置
(1)用pip安裝
? ?這個是安裝python后就有的安裝方法,也是最簡單的安裝方法,在控制臺輸入
? ?Pip install mitmproxy即可,會自動安裝mitmdump和mitmweb組件:
但是到最后安裝會失敗:
? ?是因為安裝這個包的 window 系統(tǒng)需要首先安裝 Microsoft Visual C++ V14.0以上 才行。
? ?可以在https://visualstudio.microsoft.com/downloads/
直接下載即可,安裝之后需要c++的庫之類的東西都安裝了,然后再在命令行進行安裝 mitmproxy即可:
然后進入安裝目錄,我們選擇第三個:
在“安裝 Visual Studio”屏幕中找到所需的工作負載,選擇"使用的桌面開發(fā)C++"工作負荷:
注:這里的文件太大,我直接安裝到E盤。
之后再安裝就可以安裝成功了:
(2)在GitHub或官網上安裝
GitHub:https://github.com/mitmproxy/mitmproxy
官網:https://mitmproxy.org
下載地址:https://github.com/mitmproxy/mitmproxy/releases
3.證書配置
(1) 產生CA證書
? ?對于mitmproxy來說,如果想要截獲HTTPS請求,也需要設置證書。它在安裝后會提供一套CA證書,只要客戶端信任了mitmproxy的證書,就可以通過mitmproxy獲取HTTPS請求的具體內容,否則無法解析HTTPS請求。
? ?在cmd中輸入命令行接口命令mitmdump,產生CA證書,在用戶目錄找到CA證書:
這里的目錄可以自行指定,但必須是在第一次運行mimdump時。
(2)PC端安裝
? ?電腦是Window系統(tǒng),因此用mitmproxy-ca.p12,雙擊后出現導入證書的引導頁:
點擊下一步,不需要設置密碼:
接下來點擊下一步,需要選擇證書的存儲區(qū)域,和配置Charles一樣:
最后會有警告,選擇是即可,證書就安裝到我們的電腦上了:
(3)手機端安裝
? ?我的手機是Android系統(tǒng),直接把mitmproxy-ca.pem文件發(fā)送到手機上即可。
? ?配置方法和Charles類似。HTTPS請求。
? ?手動更改為.crt 格式,最后隨便放進某個文件夾即可,用手機(我用的360手機)設置里的安全,找到從存儲設備安裝找到該crt文件進行配置:
4.抓包原理
? ?在mitmproxy中,會在PC端的8080端口運行,然后開啟一個代理服務,就是一個HTTP/HTTPS代理,類似ip代理。
? ?手機和PC在同一局域網內,設置代理為mitmproxy的代理地址,抓包工具mitmproxy就相當于中間人的作用,數據就會流經抓包工具。這個過程還可以對接mitmdump,抓取到的請求和響應都可以直接用Python來處理,然后分析,存到本地,或存到數據庫。
5.設置代理
? ?在抓包前需要先設手機局域網置代理為抓包工具mitmproxy代理。
(1)啟動代理服務
? ?在cmd中輸入mitmproxy,會在8080端口運行一個代理服務,由于該命令不支持Windows系統(tǒng),因此在Windows系統(tǒng)中用mitmdump命令:
用mitmdump啟動代理服務,監(jiān)聽8080端口:
(2)設置當前代理
? ?將手機和電腦連到同一局域網下,先用操作系統(tǒng)命令ipconfig查看PC端當前局域網的ip:
為10.61.131.172,在手機端設置代理如下:
這樣就配置好了mitmproxy的代理。
6.抓包
? ?運行mitmweb(由于mitmproxy不能用),就可以看到手機上的所有請求:
網頁呈現如下:
? ?隨便打開一條網絡請求,發(fā)現和在網頁的開發(fā)者工具下,監(jiān)聽到的一樣:
7.mitmproxy的高級功能mitmdump
? ?上面的功能與方法在Fiddler和Charles中也有,那么mitmproxy的優(yōu)勢何在?
? ?在mitmproxy中它的強大體現到mitmdump工具,可以對接Python對數據請求進行處理。
? ?它是mitmproxy的命令行接口,可以對接python程序對請求進行處理,不需要手動截取和分析HTTP請求和響應,進行數據存儲和解析都可以通過Python來完成。
(1)簡單獲取數據(隨便一個app)
我們先創(chuàng)建一個文件夾:
然后打開轉到該文件夾下:
? ?輸入mitmdump -w outfile(outfile名稱和擴展名可以自定義,文件放到當前cmd打開目錄下,也可以用絕對相對路徑,但比較麻煩):
截取廣播頁面:
之后把截獲的數據保存到文件夾下:
打開文件,發(fā)現好多亂碼:
下面會對其進行處理。
(2)可以指定一個腳本來處理截獲的數據:
? ?Mitmdump -s script.py(腳本名字可以自定義),需要放在cmd當前目錄下,也可以用絕對相對路徑,但比較麻煩。
寫入如下代碼:
? ?就是定義了一個request()方法,參數為url,其實是一個HTTPFlow對象,通過request屬性即可獲取到當前請求對象。然后打印出請求頭,將User-Agent(用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統(tǒng)及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言瀏覽器插件等)修改為MitmProxy。
運行之后手機端訪問http://httpbin.org/get,可以看到請求頭:
PC端如下:
? ?手機端請求的Headers實際上就是請求的Headers,User-Agent被修改成了mitmproxy(防反爬),PC端顯示修改后的Headers內容,其User-Agent正是MitProxy。
? ?這樣就可以讓服務器識別不出我們的是爬蟲程序了。
(3)日志輸出
? ?mitmdump提供了專門的日志輸出功能,就是設定輸出到控制臺的顏色,可以分別為不同級別配置不同的顏色,更加直觀:
效果如下:
(4)輸出請求數據
? ?可以輸出一些請求信息,比如請求連接(url),請求頭(headers),請求Cookies(cookies),請求Host(host),請求方法(method),請求端口(port),請求協(xié)議(scheme)等。
? ?還可以把這些請求的信息進行修改后,再發(fā)送到服務器中,這樣,服務器返回的可能不是app想請求的網頁,這就是為什么一些app打開后卻訪問到了其他網址的原因。
? ?也可以通過該用法,通過修改Cookies,添加代理等方式來盡可能避免反爬。
這里就先進行略過。
(5)獲得響應
? ?響應就是請求后服務器返回的信息,也就是我們需要的,大部分是json格式文件。
? ?對于json格式文件,mitmdump也提供了對應的處理接口,就是response()方法。
? ?我們可以打印各個http/https請求的響應內容,不過text才是我們想要的json格式文件,也可以用content,不過返回的是二進制文件。
代碼如下:
我們先試一下:
內容有些亂,接下來我們就進行分析得到我們需要的數據。
四:利用mitmproxy進行app數據獲取
1.獲取請求url
獲取http/https請求url,也可以認為是接口:
修改python文件,獲得請求的url:
然后停留在該頁面:
會發(fā)現出現了好多url:
我們一一分析一下,發(fā)現接口信息分別是:
這個接口
https://images.sanmaoyou.com/img/new_images/5ac83890033ec.jpg
是GET請求獲取文件:
這個接口的為json文件,為GET獲取方式:
這個接口
https://images.sanmaoyou.com/audio/library/2018-04/5ac83887c5263.mp3
是下載音樂,為GET獲取方式:
這個接口
http://sdk-open-phone.getui.com/api.php?format=json&t=1&d=76060FDC1EFFF74C1956225F1DBEE6AF006578C33658C4AF90D802512BF321C8&k=2是POST方式,是傳文件。
我們在向右點擊下一個廣播,進行驗證:
? ?發(fā)現基本上,新打開一個廣播后,會加載mp3文件,圖片文件,比較長的接口就返回json文件:
2.接口url文件
把接口保存到txt文件中:
發(fā)現只有很長的接口才返回json文件。因此下面就需要對這些接口進行篩選。
3.爬取json
代碼在pa_qu_json.py文件中,需要先創(chuàng)建一個json爬取數據文件夾,爬取后的結果如下:
接下來用Python處理即可,這里只是簡單爬取。在實際應用中,不是人工的,是用代碼自動化進行分析各個請求和響應進行爬取。這里有個跨平臺的移動端自動化測試工具,可以很方便地進行自動化爬取,在下一個爬蟲博客中會詳細講到,希望大家把寶貴意見提出來一起學習進步。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
