APP抓包
前面我們了解了一些關(guān)于 Python 爬蟲(chóng)的知識(shí)薯定,不過(guò)都是基于 PC 端瀏覽器網(wǎng)頁(yè)中的內(nèi)容進(jìn)行爬取÷饲現(xiàn)在手機(jī) App 用的越來(lái)越多,而且很多也沒(méi)有網(wǎng)頁(yè)端夏伊,比如抖音就沒(méi)有網(wǎng)頁(yè)版抹沪,那么上面的視頻就沒(méi)法批量抓取了嗎刻肄?
答案當(dāng)然是 No!對(duì)于 App 來(lái)說(shuō)應(yīng)用內(nèi)的通信過(guò)程和網(wǎng)頁(yè)是類(lèi)似的融欧,都是向后臺(tái)發(fā)送請(qǐng)求敏弃,獲取數(shù)據(jù)。在瀏覽器中我們打開(kāi)調(diào)試工具就可以看到具體的請(qǐng)求內(nèi)容蹬癌,在 App 中我們無(wú)法直接看到权她。所以我們就要通過(guò)抓包工具來(lái)獲取到 App 請(qǐng)求與響應(yīng)的信息。關(guān)于抓包工具有 Wireshark,Fiddler,Charles等逝薪。今天我們講一下如何用 Fiddler 進(jìn)行手機(jī) App 的抓包隅要。
Fiddler 的工作原理相當(dāng)于一個(gè)代理,配置好以后董济,我們從手機(jī) App 發(fā)送的請(qǐng)求會(huì)由 Fiddler 發(fā)送出去步清,服務(wù)器返回的信息也會(huì)由 Fiddler 中轉(zhuǎn)一次。所以通過(guò) Fiddler 我們就可以看到 App 發(fā)給服務(wù)器的請(qǐng)求以及服務(wù)器的響應(yīng)了。
Fiddler 安裝配置
我們安裝好 Fiddler 后廓啊,首先在菜單 Tool>Options>Https 下面的這兩個(gè)地方選上欢搜。
然后在 Connections 標(biāo)簽頁(yè)下面勾選上 Allow remote computers to connect,允許 Fiddler 接受其他設(shè)備的請(qǐng)求。
同時(shí)要記住這里的端口號(hào)谴轮,默認(rèn)是 8088炒瘟,到時(shí)候需要在手機(jī)端填。
配置完畢第步,保存后疮装,一定關(guān)掉 Fiddler 重新打開(kāi)。
手機(jī)端配置
確保手機(jī)和電腦在同一個(gè)局域網(wǎng)中粘都,我們先看下計(jì)算機(jī)的 IP 地址廓推,在 cmd 中輸入 ipconfig 就可以看到。我電腦用的是無(wú)線(xiàn)網(wǎng)翩隧,所以 IP 地址為 192.168.1.3樊展。
打開(kāi)手機(jī)無(wú)線(xiàn)連接,選擇要連接的熱點(diǎn)堆生。長(zhǎng)按選擇修改網(wǎng)絡(luò)专缠,在代理中填上我們電腦的 IP 地址和 Fiddler 代理的端口。如下圖所示:
保存后淑仆,在手機(jī)原生瀏覽器打開(kāi) http://192.168.1.3:8008 藤肢,就是上面我們的計(jì)算機(jī) IP 和端口。這一步我在夸克瀏覽器中打開(kāi)是不行的糯景,一定要到手機(jī)自帶的瀏覽器打開(kāi)。
打開(kāi)后省骂,點(diǎn)擊下圖鏈接蟀淮,下載證書(shū),然后安裝證書(shū)钞澳。
電腦端瀏覽器也需要打開(kāi)此地址怠惶,安裝證書(shū),方便以后對(duì)瀏覽器的抓包操作轧粟。
安裝后就萬(wàn)事 OK 了策治,可以用手機(jī)打開(kāi) App ,在 Fiddler 上愉快的抓包了兰吟。
抓包
我們打開(kāi)抖音 App,會(huì)發(fā)現(xiàn) Fiddler 上出來(lái)很多連接通惫。我們先清空沒(méi)用的連接信息,然后滑動(dòng)到某個(gè)人的主頁(yè)上混蔼,來(lái)查看他發(fā)布過(guò)的所有視頻履腋,同時(shí)在 Fiddler 上找到視頻鏈接。
經(jīng)過(guò)觀(guān)察篩選我們可以看出上圖就是我們需要的請(qǐng)求地址,這個(gè)地址其實(shí)是可以在瀏覽器上打開(kāi)的遵湖,但是我們需要改一下瀏覽器的User-Agent,我用的是Firefox的插件悔政,打開(kāi)后和 Fiddler 右邊的信息是一致的。我們看下 Fiddler 右邊該請(qǐng)求的響應(yīng)信息延旧。
看到返回了一個(gè) JSON 格式的信息谋国,其中aweme_list 就是我們需要的視頻地址,has_more=1 表示往上滑動(dòng)還會(huì)加載更多迁沫。之后就可以寫(xiě)代碼了芦瘾。
代碼
代碼很簡(jiǎn)單,和我們前幾篇講的一樣弯洗,直接用 requests 請(qǐng)求相應(yīng)鏈接即可旅急。
代碼僅做為一個(gè)簡(jiǎn)單的例子,僅僅下載當(dāng)前頁(yè)面的內(nèi)容牡整,如果要下載全部的視頻藐吮,可以根據(jù)當(dāng)次返回 JSON 結(jié)果中的 has_more 和 max_cursor 參數(shù)構(gòu)造出新的 URL 地址不斷的下載。
URL 中的 user_id 可以根據(jù)自己要爬取的用戶(hù)更改逃贝,可以通過(guò)把用戶(hù)分享到微信谣辞,然后在瀏覽器中打開(kāi)鏈接,在打開(kāi)的 URL 中可以看到用戶(hù)的 user_id沐扳。
import requests
import urllib.request
def get_url(url):
headers = {'user-agent': 'mobile'}
req = requests.get(url, headers=headers, verify=False)
data = req.json()
for data in data['aweme_list']:
name = data['desc'] or data['aweme_id']
url = data['video']['play_addr']['url_list'][0]
urllib.request.urlretrieve(url, filename=name + '.mp4')
if __name__ == "__main__":
get_url('https://api.amemv.com/aweme/v1/aweme/post/?max_cursor=0&user_id=98934041906&count=20&retry_type=no_retry&mcc_mnc=46000&iid=58372527161&device_id=56750203474&ac=wifi&channel=huawei&aid=1128&app_name=aweme&version_code=421&version_name=4.2.1&device_platform=android&ssmix=a&device_type=STF-AL10&device_brand=HONOR&language=zh&os_api=26&os_version=8.0.0&uuid=866089034995361&openudid=008c22ca20dd0de5&manifest_version_code=421&resolution=1080*1920&dpi=480&update_version_code=4212&_rticket=1548080824056&ts=1548080822&js_sdk_version=1.6.4&as=a1b51dc4069b2cc6252833&cp=dab7ca5f68594861e1[wIa&mas=014a70c81a9db218501e1433b04c38963ccccc1c4cac4c6cc6c64c')
運(yùn)行后就可以得到視頻列表:
有任何疑問(wèn)泥从,歡迎加我微信交流。