对不起,我把APP也给爬了
來源 | 凹凸數據
責編 | Carol
封圖 |?CSDN 付費下載于視覺中國
最近群里很多小伙伴對爬取手機App和小程序感興趣,今天本廚師將給大家呈現這道菜,供小伙伴們品嘗。
相信大家都對爬蟲有一定的了解,我們爬PC端時候可以打開F12去觀察url的變化,那么手機的發出請求我們應該怎么攔截呢。
今天的主菜就是給大家介紹一個抓包工具Fiddler,并用它烹煮一道廣州房價爬蟲。
Fiddler是一個http調試工具,也僅限于攔截http協議的請求,這是它的短板之處,但是對于我們平常的練習運用也足夠了,因為大多數網站都是走http協議。跟Fiddler同類型的抓包工具還有很多,像Charles、Burpsuite等等。
像其中Burpsuite的功能是比較強大的,它們都是PC軟件,不是裝在手機端,有興趣的小伙伴可以去了解一下。
抓包工具 Fiddier
話不多說,我先教大家怎么設置Fiddler。
主要三個步驟:
1、安裝軟件后,打開Fiddler的Tools選項,進行第一步,分別對General,HTTPS,Connections窗口進行如下設置。
把該勾上的勾上后,我們回到HTTPS這個界面,點擊Actions,選擇Trust,安裝證書。
這時候我們的PC端的洗菜流程已經完成啦。
2、接下來我們就要設置手機端,我們既然要通過PC端攔截手機發出的請求,就要設置手機的網絡跟PC是同一個。
網絡下,所以第二步,我們要更改手機ip。我們先來看看你的PC斷ip是多少。先打開cmd進入終端后,輸入ipconfig回車。
就可以看到你的ip地址了。
這時候終于輪到你的寶貝手機出場了,熟練的連上你的wifi之后,修改你的wifi設置,點擊高級選項后,分別輸入你的ip和端口后保存。
3、大家是不是覺得很簡單呢,別高興太早了!最關鍵的一步到了,在我們完成第一、二步設置后,打開你的手機瀏覽器輸入你的ip和端口號(例127.0.0.1:8080),回車,這時候會跳轉到一個下載手機端證書的頁面,下載后并信任證書后(注:某些安卓手機會要獲得root權限才行),這時候,我們安裝三部曲就大功告成了。
萬事俱備,只欠東風,食材都清洗好了,現在我就教大家怎么利用Fiddler烹煮小程序。
抓包實戰
先打開一個小程序網站,我選擇的是Q房網,大家看,菜下鍋后,Fiddler是不是變化了。
這就是用fiddler攔截到你的手機發出請求的網頁信息了和它的鏈接,這個網頁信息是通過json數據加載的。
然后往上看,Raw模塊是獲取請求頭的地方。
有了這兩個信息,我們的爬蟲代碼也就可以開始編寫了。
爬蟲代碼
基操requests,循環頁數,由于是獲取的數據是json格式,我們就要利用json.loads格式化抓取的信息,才能進行一個數據提取。
部分爬蟲代碼,完整版下載見文末。
url?=?'https://mapi.qfang.com/wechat/api/v3_2_0/room?dataSource=GUANGZHOU&unionId=這里也是微信id&platform=wechat&bizType=SALE¤tPage={}&pageSize=20&keyword=®ion=&l=&s=&p=&b=&a=&r=&h=&g=&t=&o=&fromPrice=&toPrice=&unitPrice=&fromUnitPrice=&toUnitPrice=' #爬取到50頁,程序就停止 for?i?in?range(1,51):time.sleep(rand_seconds)url3?=?url.format(i)#?print(url3)res?=?session.get(url=url3,?headers=headers)#?print(res.text)data?=?json.loads(res.text)try:id_list?=?data['result']['list']#?print(333,id_list)for?i?in?id_list:id?=?i['id']#?print(id)url2?=?'https://mapi.qfang.com/wechat/api/v3_2_0/room/detail?dataSource=GUANGZHOU&unionId=這里也是微信id&platform=wechat&id={}&bizType=SALE&userId=&accountLinkId=&top=1&origin=sale-list'.format(id)time.sleep(rand_seconds)try:requests.adapters.DEFAULT_RETRIES?=?3res2?=?session.get(url=url2,?headers=headers,?timeout=10)except?requests.exceptions.ConnectionError:requests.adapters.DEFAULT_RETRIES?=?3res2?=?session.get(url=url2,?headers=headers,?timeout=10)except?requests.exceptions.ReadTimeout:requests.adapters.DEFAULT_RETRIES?=?3res2?=?session.get(url=url2,?headers=headers,?timeout=10)item?=?{}res2_data?=?json.loads(res2.text)try:roominfo?=?res2_data['result']['roomInfo']except?KeyError:break爬取數據結果:
數據可視化
菜做好了,當然還要撒點香菜才能上桌啦,做個簡單可視化吧,由于爬取的數據很干凈,我省掉清洗數據的環節,直接上手,在各位群大佬面前獻丑了。
我們先來看看該網站的廣州二手房的最高價和最低價,這最高價的數字太感人了.... 這多少個0我都數不對。
import?pandas?as?pd import?matplotlib.pyplot?as?pltdf?=?pd.read_csv(r'F:\PycharmProjects\house_spider\廣州二手房.csv',?encoding='gbk') #?print(df) df?=?df.astype({'price':?'float64'})??#先將價格的類型轉為浮點數,方便后面計算 df_max?=?df['price'].max()??#查看爬取的數據中房價最高的價格 df_min?=df['price'].min()??#房價最低的價格 print('廣州二手房最高價:%s,最低價:%s'%(df_max,df_min))re_price?=?['region',?'price']#?分組統計數量 price_df?=?df[re_price] #?#根據區域價格計算區域房價均價 region_mean_price?=?price_df.groupby(['region'],as_index=False)['price'].agg({'mean_price':'mean'}) region_mean_price?=?region_mean_price.sort_values(by='mean_price') print(region_mean_price)#利用循環提取已經處理好的區域和它的均值 for?x,y?in?zip(region_mean_price.region,?region_mean_price.mean_price):plt.text(x,?y,'%.0f'?%y,?ha='center',?va=?'bottom',fontsize=11)#?顯示柱狀圖值 plt.bar(region_mean_price.region,?region_mean_price.mean_price,?width=0.8,?color='rgby') plt.show()繼續繼續,我們來統計一下廣州各區的房價,然后算出各個區域均值,通過groupby分組統計出region_mean_price
(豆腐內心os:原來黃埔房價都那么高了,各網站數據的差異性也會導致最終展示的結果不一樣,大家可以選個大網站試試)
到此,我們這次利用工具抓包小程序網站的介紹就結束了,大家也可以試試app,原理一樣。
謝謝大家觀看,拜拜咯~
本文涉及爬蟲、可視化代碼下載:
https://alltodata.cowtransfer.com/s/f0b70e0c24164c
?
推薦閱讀
震驚!阿里的程序員竟被一個簡單的 SQL 查詢難住了!
巧用 Trie 樹,實現搜索引擎關鍵詞提示功能
手把手教你配置VS Code 遠程開發工具,工作效率提升N倍
諾基亞的百年沉浮
亞馬遜創始人或成地球首位萬億富豪,設計“女人流程圖”找對象,不一般的貝佐斯!
超級賬本Hyperledger Fabric中的Protobuf到底是什么?
Go遠超Python,機器學習人才極度稀缺,全球16,655位程序員告訴你這些真相
真香,朕在看了!
總結
以上是生活随笔為你收集整理的对不起,我把APP也给爬了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MQ 技术产品井喷,今天来详聊一下腾讯开
- 下一篇: 我26岁,月薪一万,刚实现“黄焖鸡自由”