摘要:配合安卓模擬器有了前文的鋪墊,在加上以前對和的學習,和模擬器連接操作就非常容易了。配置模擬器的代理,指向電腦,同時端口為。
本篇博客為大家介紹 mitmproxy
,該工具與 Charles
和 Fiddler
實現的功能類似,都可以輔助我們分析接口。
mitmproxy
是一個免費且開源的交互式 HTTPS 代理,在爬蟲領域一般將其用作手機模擬器,無頭瀏覽器,可以用它作為代理去攔截爬蟲獲取到的數據。
mitmproxy
可以與 fiddler
工具一樣,安裝一個客戶端進行操作,地址如下:
官網地址:https://mitmproxy.org/
6.0版本下載地址:https://mitmproxy.org/downloads/#6.0.2/
需要特殊的手段進行訪問,國內已經將其地址屏蔽。
下載的最新 Windows Installer
版本即可(由于我電腦使用的是 Windows7 操作系統,顧下載 6.0 版本),其文檔說明也非常清楚:https://docs.mitmproxy.org/stable/
安裝完畢,會自動運行控制臺,啟動 mitmproxy ui
。
通過瀏覽器訪問上述地址,得到如下界面。
如果出現如下異常 缺少 api-ms-win-core-path-l1-1-0.dll ,打開下述鏈接下載 dll 組件即可。
https://download.csdn.net/download/hihell/38146147
接下來設置一下瀏覽器代理,是數據通過監聽端口,按照如下步驟操作即可。
除此之外,為了捕獲 HTTPS
協議的請求,還需要安裝證書,在瀏覽器打開 http://mitm.it/
下載 Windows 證書即可,下圖就是抓取成功時候的樣子。
證書也可以在目錄
C:/Users/Administrator/.mitmproxy
查找,Windows 下選擇mitmproxy-ca-cert.p12
。
關閉瀏覽器和控制臺之后,再次啟動只需要在控制臺輸入 mitmweb
即可實現,還有一種啟動方式,使用 mitmdump
,實現效果如下所示,該形式與 mitmweb
的差異是展示載體不一致,即一個是在網頁端,一個是在控制臺。
有了前文的鋪墊,在加上以前對 fiddler
和 Charles
的學習,mitmproxy
和模擬器連接操作就非常容易了。
配置模擬器的 Wlan 代理,指向電腦 IP,同時端口為 8080。
將證書 mitmproxy-ca-cert.cer
或者 mitmproxy-ca-cert.pem
拖拽到模擬器中,然后安裝證書(如無法雙擊安裝,通過【設置】->【安全】安裝即可),完成以上操作之后,只需要通過模擬器訪問百度,查看是否捕捉到數據請求即可。
僅使用如上功能是遠遠不夠的,我們看中的是 mitmproxy
可以實現腳本二次開發,所以下面在 python 環境中安裝 mitmproxy
庫,實現其擴展功能。
使用 pip install mitmproxy
即可實現該庫的安裝,mitmproxy
要求 python 最低版本是 python3.8
,所以安裝前需要確定你的 Python 版本是否滿足要求(實測 Python3.7 也安裝成功了)。
安裝過程中,發現 pyperclip
無法安裝成功,解決辦法是下載其 tar.gz 文件,解壓之后,使用 python setup.py install
進行本地安裝。
mitmproxy
包含的模塊比較多,其中任意模塊失敗,都無法安裝成功。
Successfully installed Brotli-1.0.9 Jinja2-2.11.3 MarkupSafe-2.0.1 Werkzeug-1.0.1 asgiref-3.3.4 certifi-2021.10.8 cffi-1.15.0 click-7.1.20 hpack-4.0.0 hyperframe-6.0.1 itsdangerous-1.1.0 ldap3-2.8.1 mitmproxy-5.3.0 msgpack-1.0.2 passlib-1.7.4 protobuf-3.13.0 publicsuffix2-22.21 pydivert-2.1.0 pyparsing-2.4.7 ruamel.yaml-0.16.13 ruamel.yaml.clib-0.2.6 six-1.16.0 sortedcontainers-2.2.2 tornado-6.1 typing-exten
mitmproxy 官方提供了非常多參考案例
例子查看網址:https://docs.mitmproxy.org/stable/addons-examples/
你學習的第一個案例,就是修改 requests
請求,創建一個名稱為 script.py
的文件,編寫如下代碼:
import mitmproxy.httpdef request(flow: mitmproxy.http.HTTPFlow): flow.request.headers["User-Agent"] = "MitmProxy" print(flow.request.headers)
在控制臺使用 mitmdump -s script.py
啟動文件,并開啟瀏覽器代理,訪問 http://httpbin.org/get
,此時就會發現用戶代理已經被我們成功修改。
還可以將多個方法合并在一個類中,然后再通過 addons
變量進行綁定,例如官方提供的案例。
from mitmproxy import ctxclass Counter: def __init__(self): self.num = 0 def request(self, flow): self.num = self.num + 1 ctx.log.info("We"ve seen %d flows" % self.num)addons = [ Counter()]
在命令行重啟 mitmproxy
,刷新瀏覽器獲取如下內容。
這里還需要了解的就是為了實現 mitmproxy
與 python
之間的交互,有一些固定名稱的函數需要記憶一下。
def http_connect(self, flow: mitmproxy.http.HTTPFlow)
:與服務器建立連接;def requestheaders(self, flow: mitmproxy.http.HTTPFlow)
:客戶端的 HTTP 請求的頭部被成功讀取,請求 body 沒有讀取;def request(self, flow: mitmproxy.http.HTTPFlow)
:客戶端的 HTTP 請求被成功完整讀取;def responseheaders(self, flow: mitmproxy.http.HTTPFlow)
:服務器返回的響應頭被讀取,響應 body 還沒有返回;def response(self, flow: mitmproxy.http.HTTPFlow)
:響應完整返回;def error(self, flow: mitmproxy.http.HTTPFlow)
:異常狀態。這里對具體細節的 API 不做過多的說明,都可以從手冊查閱出來,官方手冊:https://docs.mitmproxy.org/stable/api/events.html
本次實現的爬蟲案例是,訪問 CSDN 任意博主的粉絲列表,在控制臺打印出粉絲數據(隱私問題,沒有存儲)。
那官方博客測試,發現接口如下:
https://blog.csdn.net/community/home-api/v1/get-fans-list?page=4&size=20&noMore=false&blogUsername=blogdevteam
請求方式為 get ,請求地址為 https://blog.csdn.net/community/home-api/v1/get-fans-list
,修改 script.py
文件代碼如下:
from mitmproxy import ctximport jsondef response(flow): start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list" response = flow.response if flow.request.url.startswith(start_url): text = response.text data = json.loads(text) print(data)
或者使用如下代碼,也可以實現相同的效果。
import jsonclass GetFans(object): def response(self, flow): start_url = "https://blog.csdn.net/community/home-api/v1/get-fans-list" response = flow.response if flow.request.url.startswith(start_url): text = response.text data = json.loads(text) print(data)addons = [ GetFans()]
這時候,如果我們能實現自動化下拉頁面,是不是就能實現一個自動化的爬蟲了呢???
今天是持續寫作的第 267 / 365 天。
可以關注我,點贊我、評論我、收藏我啦。
更多精彩
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125083.html
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:支持全平臺的安裝,我們直接從的里面安裝即可,鏈接為。平臺可以下載安裝包如,平臺可以下載安裝包如,平臺可以選擇下載源碼,但是更推薦用下文的安裝方式。上一篇文章網絡爬蟲實戰爬取相關庫的安裝的安裝下一篇文章網絡爬蟲實戰爬蟲框架的安裝 上一篇文章:Python3網絡爬蟲實戰---8、APP爬取相關庫的安裝:MitmProxy的安裝下一篇文章:Python3網絡爬蟲實戰---10、爬蟲框架的安裝...
摘要:還有一個大坑,就是如果你的機子是安卓而是系統其他系統沒測試過的話,安裝了證書也是沒用的,在進行抓包的時候還是會提示證書有問題。 學會如何抓包,是爬蟲的必備技能,甚至可以說,不會抓包就等同于不會爬蟲。 那我們怎樣抓包呢?如果直接抓取瀏覽器上的內容,可以直接使用開發者工具進行抓包,但有個局限,只能抓瀏覽器的,功能也沒有多少。還可以使用別的工具,比如 mitmproxy、charles,當然...
閱讀 2967·2021-11-25 09:43
閱讀 3632·2021-08-31 09:41
閱讀 1237·2019-08-30 15:56
閱讀 2118·2019-08-30 15:55
閱讀 2993·2019-08-30 13:48
閱讀 2814·2019-08-29 15:15
閱讀 983·2019-08-29 15:14
閱讀 2657·2019-08-28 18:26