摘要:比如分鐘破譯朋友圈測(cè)試小游戲文章里用的方法但有些根本就沒(méi)有提供網(wǎng)頁(yè)端,比如今年火得不行的抖音。所以常用的方式就是通過(guò)在電腦上裝一些抓包軟件,將手機(jī)上的網(wǎng)絡(luò)請(qǐng)求全部顯示出來(lái)??偨Y(jié)下,重點(diǎn)是的抓取,關(guān)鍵是配置代理證書(shū),難點(diǎn)是對(duì)請(qǐng)求的分析。
爬蟲(chóng)的案例我們已講得太多。不過(guò)幾乎都是 網(wǎng)頁(yè)爬蟲(chóng) 。即使有些手機(jī)才能訪問(wèn)的網(wǎng)站,我們也可以通過(guò) Chrome 開(kāi)發(fā)者工具 的 手機(jī)模擬 功能來(lái)訪問(wèn),以便于分析請(qǐng)求并抓取。(比如 3分鐘破譯朋友圈測(cè)試小游戲 文章里用的方法)
但有些 App 根本就沒(méi)有提供網(wǎng)頁(yè)端,比如今年火得不行的 抖音 。(網(wǎng)上有些教程也是用網(wǎng)頁(yè)手機(jī)模擬的方法,但此法現(xiàn)已失效。)
對(duì)于這種情況,我們能不能抓取?要怎么抓取?今天就來(lái)分享一下。
手機(jī)抓包本文的重點(diǎn)就在于 如何獲取手機(jī) App 發(fā)出的請(qǐng)求 。
手機(jī) App 不像電腦上的網(wǎng)頁(yè)能直接通過(guò)瀏覽器查看相關(guān)信息,在手機(jī)設(shè)備上也不方便使用工具一邊流量一邊調(diào)試。所以常用的方式就是通過(guò)在電腦上裝一些 “抓包”軟件 ,將手機(jī)上的網(wǎng)絡(luò)請(qǐng)求全部顯示出來(lái)。
那為什么電腦能看到手機(jī)上的網(wǎng)絡(luò)請(qǐng)求?這里就要提下“ 代理 ”這個(gè)概念。我們之前的文章 聽(tīng)說(shuō)你好不容易寫(xiě)了個(gè)爬蟲(chóng),結(jié)果沒(méi)抓幾個(gè)就被封了? 中也講過(guò)代理。形象的解釋就是字面的理解: 所有你發(fā)出的請(qǐng)求不再是直接發(fā)到目的地,而是先發(fā)給這個(gè)代理,再由代理幫你發(fā)出 。所以通過(guò)代理,可以實(shí)現(xiàn) 隱藏 IP、進(jìn)入專用網(wǎng)絡(luò)、翻…咳咳那啥 等功能,也包括我們今天說(shuō)的: 手機(jī)抓包 。
順帶說(shuō)句,在公共場(chǎng)所別隨便連不確定的免費(fèi) wifi,理論上來(lái)說(shuō),人家也可以抓你的包。
這里,我們要用的工具是 Fiddler 。它是一個(gè)較成熟的免費(fèi)抓包工具??梢宰ト【W(wǎng)頁(yè)、桌面軟件、手機(jī) App 的網(wǎng)絡(luò)請(qǐng)求,并可以運(yùn)行在 Windows、Mac、Linux 平臺(tái)上,支持 iOS 和 Android。(雖說(shuō)都支持,但強(qiáng)烈建議 Windows + Android ,后面我會(huì)有吐槽)
上周我們的送書(shū)活動(dòng)收到不少同學(xué)的項(xiàng)目和代碼,其中 @離島 同學(xué)提交了一個(gè) Fiddler 手機(jī)抓包的教程。下載安裝
https://segmentfault.com/a/1190000015571256
本文中部分內(nèi)容和圖片就轉(zhuǎn)自她這篇文章。她的博客上還有不少文章和學(xué)習(xí)筆記,可以關(guān)注交流。也歡迎其他同學(xué)給我們投稿。
搜索一下 fiddler 很容易找到它們的官網(wǎng) https://www.telerik.com/fiddler,點(diǎn)擊 download 下載即可(有個(gè)表格隨便填下)。
Windows 下載后正常安裝。如果是 Mac,還會(huì)有安裝步驟提示,告訴你需要先安裝一個(gè)叫做 Mono 的框架,以便可以執(zhí)行 Fiddler.exe。另外 Mac 版還有幾個(gè)小坑:
1. 運(yùn)行 mono 命令用 sudo
2. 如果報(bào)一堆錯(cuò)閃退,請(qǐng)用 mono --arch=32 Fiddler.exe(這個(gè)參數(shù)還必須放在文件名前面)
3. 第一次正確運(yùn)行時(shí),程序 會(huì)卡住很長(zhǎng)時(shí)間 ,以至于我以為還是掛了,這時(shí)請(qǐng)耐心等待。(我要不是正好有事走開(kāi),回來(lái)發(fā)現(xiàn)成功了,可能就放棄嘗試了)
4. 即使正常運(yùn)行了,Mac 上界面也會(huì)有各種顯示的 bug,切記不要打開(kāi)的彈窗的情況下切換程序,不然回來(lái)就找不到彈窗了……
5. 軟件中無(wú)法復(fù)制……
6. 在 iOS 上無(wú)法抓取 HTTPS 請(qǐng)求(這基本就是廢了),需要額外創(chuàng)建一個(gè)證書(shū),但這個(gè)證書(shū)工具只能在 Windows 下運(yùn)行……
所以可以的話,還是用 Windows 來(lái)做。Mac 上還有個(gè)比較知名的工具 Charles ,有用過(guò)的可以留言評(píng)價(jià)下。
配置安裝好工具后,需要做一些必要配置才能抓包。
1. Fiddler 配置
設(shè)置允許抓取 HTTPS 信息包。打開(kāi)下載好的 fiddler,找到 Tools - > Options,然后在 HTTPS 的工具欄下勾選 Decrpt HTTPS traffic ,在新彈出的選項(xiàng)欄下勾選 Ignore server certificate errors 。這樣,fiddler 就會(huì)抓取到 HTTPS 的信息包。
設(shè)置允許外部設(shè)備發(fā)送 HTTP/HTTPS 到 fiddler。設(shè)置 端口號(hào) ,并在 Connections 選項(xiàng)欄下勾選 Allow remote computers to connect 。
配置好后需重啟軟件。
2. 設(shè)置手機(jī)代理
在抓包前,確保你的電腦和手機(jī)是在一個(gè) 可以互訪的局域網(wǎng)中 。最簡(jiǎn)單的情況就是都連在同一個(gè) wifi 上,特殊情況這里不展開(kāi)討論(有些商用 wifi 并不能互訪)。
打開(kāi)軟件,鼠標(biāo)放在右上角的 Online 上可以看到 本機(jī)的 IP ?;蛘咭部梢酝ㄟ^(guò)命令行中的 ipconfig 命令(Mac/Linux 是 ifconfig )查看。(截圖僅為演示,以你自己的 IP 為準(zhǔn))
手機(jī)設(shè)置代理 IP。打開(kāi)手機(jī) 無(wú)線網(wǎng)絡(luò)連接 ,選擇已經(jīng)連接的網(wǎng)絡(luò)連接,點(diǎn)擊一個(gè)小圓圈嘆號(hào)進(jìn)入可以看到下圖(安卓也類(lèi)似),選擇 配置代理 ,進(jìn)入后把剛剛的 IP 地址 輸入進(jìn)去, 端口 就是 fiddler 中設(shè)置的 8888。
3. 安裝證書(shū)
獲取 HTTPS 請(qǐng)求必須要 驗(yàn)證證書(shū) 。電腦端訪問(wèn):http://localhost:8888/ 進(jìn)行安裝。
手機(jī)訪問(wèn)前面設(shè)置的電腦的 IP 地址加端口 8888 訪問(wèn),比如圖中例子是:http://192.168.23.1:8888
有些安卓需要手動(dòng)從設(shè)置里進(jìn)入并導(dǎo)入證書(shū),否則無(wú)法生效。
4. 測(cè)試
開(kāi)啟 fiddler 的狀態(tài)下,打開(kāi)手機(jī)隨便一個(gè) APP,應(yīng)對(duì)可以正常訪問(wèn),并且在 fiddler 中看到所發(fā)出的網(wǎng)絡(luò)請(qǐng)求。
如果能訪問(wèn)但看不到請(qǐng)求,確認(rèn)下有沒(méi)有代理有沒(méi)有生效。如果不能訪問(wèn),檢查下證書(shū)是否都下載并驗(yàn)證。還是不行則按照上述步驟再仔細(xì)配置一遍。
分析請(qǐng)求完成這一步之后,接下來(lái)的事情就和網(wǎng)頁(yè)爬蟲(chóng)沒(méi)太大區(qū)別了。無(wú)非就是從這些請(qǐng)求中,找到我們需要的那幾個(gè)。
fiddler 里記錄的是所有請(qǐng)求,比較多。在操作 App 前,記得清空已有請(qǐng)求,方便觀察。然后再配合上 filter 篩選器 ,定義篩選規(guī)則,會(huì)較容易找你需要的內(nèi)容。找到請(qǐng)求后,在軟件里查看你要的信息,或者右鍵點(diǎn)擊選擇將請(qǐng)求導(dǎo)出。
經(jīng)過(guò)操作+觀察,可以定位到獲取用戶上傳視頻列表的請(qǐng)求是
https://api.amemv.com/aweme/v1/aweme/post/?…
從 WebForms 欄里可以查看請(qǐng)求的詳細(xì)參數(shù)信息。返回值是一個(gè)組 JSON 數(shù)據(jù),里面包含了視頻的下載地址。
這是一個(gè)需要經(jīng)驗(yàn)積累的活兒,不同的網(wǎng)站/App,規(guī)則都不一樣,但套路是相似的。對(duì)網(wǎng)頁(yè)爬蟲(chóng)還不熟悉的話,先看看之前的文章 爬蟲(chóng)必備工具,掌握它就解決了一半的問(wèn)題。
代碼抓取得到地址之后,經(jīng)過(guò)在瀏覽器和代碼里的一番嘗試,找到了此請(qǐng)求的正確解鎖方式:
1. 需要提供以下參數(shù):max_cursor=0&user_id=94763945245&count=20&aid=1128,其中 user_id 是你要抓取的用戶 ID,其他參數(shù)都可以固定不用改。
2. 需要使用手機(jī)的 User-Agent ,最簡(jiǎn)單的就是 {"user-agent": "mobile"}
請(qǐng)求代碼:
import requests as rs uid = 94763945245 url = "https://api.amemv.com/aweme/v1/aweme/post/?max_cursor=0&user_id=%d&count=20&aid=1128" % uid h = {"user-agent": "mobile"} req = rs.get(url, headers=h, verify=False) data = req.json() print(data)
uid 替換成你想抓的用戶 ID。獲取用戶 ID 有個(gè)簡(jiǎn)單方法:在用戶頁(yè)面選擇分享,鏈接發(fā)到微信上,從網(wǎng)頁(yè)打開(kāi)就可以看到 user_id。
提取視頻列表并下載:
import urllib.request for video in data["aweme_list"]: name = video["desc"] or video["aweme_id"] url_v = video["video"]["download_addr"]["url_list"][0] print(name, url_v, " ") urllib.request.urlretrieve(url_v, name + ".mp4")
此方法截止國(guó)慶假期還是有效的,可以通過(guò) Chrome 開(kāi)發(fā)者工具進(jìn)行模擬。之后能使用多久這就沒(méi)法保證了,爬蟲(chóng)代碼都不會(huì)是一勞永逸的。
總結(jié)下,重點(diǎn)是 fiddler 的抓取 ,關(guān)鍵是 配置、代理、證書(shū) ,難點(diǎn)是 對(duì)請(qǐng)求的分析 。最終代碼只有簡(jiǎn)單兩步, 獲取視頻列表、下載視頻 。
所有代碼其實(shí)就上面兩段,也上傳了,獲取地址請(qǐng)?jiān)诠娞?hào)( Crossin的編程教室 )回復(fù)關(guān)鍵字 抖音
想看其他十多個(gè)項(xiàng)目代碼實(shí)例(電影票、招聘、貪吃蛇、代理池等),回復(fù)關(guān)鍵字 項(xiàng)目
下課!
════
其他文章及回答:
如何自學(xué)Python | 新手引導(dǎo) | 精選Python問(wèn)答 | 如何debug? | Python單詞表 | 知乎下載器 | 人工智能 | 嘻哈 | 爬蟲(chóng) | 我用Python | 高考 | requests | AI平臺(tái)
歡迎微信搜索及關(guān)注: Crossin的編程教室
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/42629.html
摘要:是一個(gè)文章內(nèi)容提取器,可以從任意資訊文章類(lèi)的網(wǎng)頁(yè)中提取文章主體,并提取標(biāo)題標(biāo)簽摘要圖片視頻等信息,且支持中文網(wǎng)頁(yè)。 爬蟲(chóng)抓取數(shù)據(jù)有兩個(gè)頭疼的點(diǎn),寫(xiě)過(guò)爬蟲(chóng)的小伙伴們一定都深有體會(huì): 網(wǎng)站的 防抓取 機(jī)制。你要盡可能將自己偽裝成一個(gè)人,騙過(guò)對(duì)方的服務(wù)器反爬驗(yàn)證。 網(wǎng)站的 內(nèi)容提取 。每個(gè)網(wǎng)站都需要你做不同的處理,而且網(wǎng)站一旦改版,你的代碼也得跟著更新。 第一點(diǎn)沒(méi)什么捷徑可走,套路見(jiàn)得多...
摘要:又到了一年一度的情人節(jié)大家都準(zhǔn)備送什么給自己心儀的對(duì)象呢鮮花巧克力都太俗套了,今天給大家?guī)?lái)一個(gè)抖音上看到的表白神器用寫(xiě)一個(gè)告白程序,讓她看到你滿滿的愛(ài)意。 又到了一年一度的情人節(jié)!大家都準(zhǔn)備送什么給自己心儀的對(duì)象呢? 鮮花、巧克力都太俗套了,今天給大家?guī)?lái)一個(gè)抖音上看到的表白神器 — 用Python寫(xiě)一個(gè)告白程序,讓她看到你滿滿的愛(ài)(tao)意(lu)。 先上效果: showImg(...
摘要:可以說(shuō)是每個(gè)程序每天必逛的網(wǎng)站,這里集聚了全球最頂級(jí)的程序員。有非常多的大公司在上面開(kāi)源自己的項(xiàng)目。今天整理了個(gè)上頂級(jí)的開(kāi)源項(xiàng)目。這是推出的一款性能類(lèi)型檢查工具。它的主要目標(biāo)是快速輕松地分發(fā)應(yīng)用程序。 showImg(https://segmentfault.com/img/remote/1460000015909645); 閱讀文本大概需要 4.2 分鐘。 GitHub 可以說(shuō)是每個(gè)...
摘要:我發(fā)現(xiàn)抖音上很多小姐姐就拍個(gè)跳舞的視頻就火了,大家是沖著舞蹈水平去的嗎,都是沖著顏值身材去的,能刷到這篇文章的都是了,我就跟大家不一樣了,一個(gè)個(gè)刷太麻煩了,我直接爬下來(lái)看個(gè)夠,先隨意展示兩個(gè)。 我發(fā)現(xiàn)抖音上很多小姐姐就拍個(gè)跳舞的視頻就火了,大家是沖著舞蹈水平去的嗎,都是沖著顏值身材去的,能刷...
閱讀 2190·2023-04-26 00:50
閱讀 2546·2021-10-13 09:39
閱讀 2364·2021-09-22 15:34
閱讀 1680·2021-09-04 16:41
閱讀 1401·2019-08-30 15:55
閱讀 2493·2019-08-30 15:53
閱讀 1761·2019-08-30 15:52
閱讀 808·2019-08-29 16:19