- 寫在前面
- 今天老婆說要做菜,可是廚藝不精啊,上網看到了一款菜普神器,安利給大家,香哈菜譜。飯後研究了一下。以前都是做web爬蟲的,今天決定想爬爬移動端的,就拿這款app 開練。
- 網上查看了好多教程,移動端的爬取基本上就是 mitmproxy+appium 這種騷操作,可是蛋疼的是appium 這個鬼東西一直在我的mac 上就是安裝不成功。問題有三個貼出來,有哪位大神路過幫忙指點一下,不勝感激。
- appium 沒搞好,準備就要放棄了。可是 想了想,appium 不就實現的是模仿人操作而已,不影響爬數據啊。那不行啊,那得幹!
環境:
- Mac Pro
- python 3.7
- mitmproxy ,mitmdum,mitmweb
- pycharm
- 香哈菜譜ios app
開整:
- 配置代理
- 安裝mitmproxy
- 通過 pip install mitmproxy
- 安裝通過安裝包安裝 網址:https://github.com/mitmproxy/mitmproxy/releases
- 證書安裝
- 保證mac 和iphone 在同一局域網
- 啓動 mitmproxy -p 8888 ,查看mac ip (ifconfig),然後將iPhone 所連接的wifi 代理設置成手動 ip 爲 mac 的 本機ip。
- iphone打開http://mitm.it/ 下載CA 證書,然後安裝設置,關於手機,描述文件中安裝。
- 停掉mitmproxy ,運行 mitmweb -p 8888.
- 打開嘻哈菜譜,不出意外 會在web 端看到數據,如下:
- 分析數據後,我們看到了 app 請求的數據。然後用 編輯 scprit.py 如下:
-
import json def check_json_format(raw_msg): """ 用於判斷一個字符串是否符合Json格式 :param self: :return: """ if isinstance(raw_msg, str): # 首先判斷變量是否爲字符串 try: json.loads(raw_msg, encoding='utf-8') except ValueError: return False return True else: return False def response(flow): url = 'apiios.xiangha.com/main8/' if url in flow.request.url: text = flow.response.text if check_json_format(text): data_json = json.loads(text) if data_json and data_json.get('data').get('dishs'): datas = data_json.get('data').get('dishs') for data in datas: try: dish_info = { 'name': data.get('name'), 'level': data.get('level'), 'favorites': data.get('favorites'), 'burdens': data.get('burdens'), 'allClick': data.get('allClick'), 'video_url': data.get('video').get('url'), 'video_time': data.get('video').get('duration'), } print(dish_info) except Exception as e: print(e)
7. 運行 mitmdump -p 8888 -s script.py 可以看到如下數據
-
-
- 安裝mitmproxy
- 到此 我們算是拿到了 香哈菜譜的 一些數據,等改天appium 的問題解決後,在整體爬一下。