mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

首页 » Python » mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

使用mitmproxy来抓取Keep首页热门动态。鳄鱼君也是费了一天的时间去测试,在这里需要提醒大家抓包不要使用Android系统超过7.0的手机,Android系统越高手机越安全,而我们的抓包很显然是不允许的,这就是为什么你在配置了手机证书之后仍不能抓取HTTPS数据的原因之一。

说一下我的经历,刚开始是使用oppoR15手机,Android 9.0,在安装证书之后大部分的HTTPS数据都抓不到,其中也包括今天准备要整理的Keep热门,显然Android的系统非常严格,虽然我们呢安装了证书,但还是不被APP认可,可能你在使用mitmproxy抓包的时候会出现很多红色字体:Cannot establish TLS with client (sni: dragate.dc.oppomobile.com): TlsExcept
ion(“SSL handshake error: Error([(‘SSL routines’, ‘ssl3_read_bytes’, ‘sslv3 aler
t certificate unknown’)]
。这个在介绍mitmproxy的使用的时候有张图片上面很多的红色报错,我也没敢说这是什么意思,怎么解决。当时我是真不知道怎么解决的,现在知道了哈!

最后我借了一个手机朵唯Android 3.2的,在安装好证书之后完全可以抓取HTTPS的数据包。那么对于Android系统较高的,推荐更换Android 系统低于7.0版本的,手机降级不推荐,风险太大。第二种方式是Root手机把证书添加到系统证书中而不是用户证书,比较困难,所以自己解决。

Mitmproxy抓取Keep热门动态数据包

使用mitmproxy抓取keep的热门页面。我们可以启动mitmproxy,然后在弹出的浏览器中抓取Keep数据:

mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

但是这种方式数据包太乱,不想看,我们也可以在Python中定制mitmproxy显示的数据包,如果你不会定制可参考:使用Python定制mitmproxy,这里只说抓取Keep数据包,不再提以前的内容。

两个文件,一个显示数据,另一个提取数据:

#mitm.py
import json
def response(flow):
    res=flow.request
    response=flow.response
    try:
        if 'keep' in res.url:
            html=json.loads(response.content)
            url=res.url
            if url and html:
                print(f'>>{html}{url}<<')
    except Exception as e:
        return None
#dump.py
import re
import sys
for line in sys.stdin:
    html=re.search('>>(.*?)<<',line)
    url=re.search('>>(.*?)<',line)
    if html and  url:

        print(f'响应的html:{html.group(1)} \n 响应的url:{url.group(1)}')


通过这种方式我们呢可以让数据显示的更加整洁,而不是屏幕一直在刷刷的滚动数据,你什么也看不到。在pycharm的terminal终端输入: mitmdump -s mitm.py | dump.py ,刷新Keep的热门动态就可以看到下图:

mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

使用mitmproxy抓取APP的数据包显得比较麻烦,我们需要的只是数据接口,废了那么大的事情还需要去寻找数据接口,不妨试试charles抓包分析一下。

Charles抓取Keep热门动态数据

我们使用Charles抓取Keep软件的热门动态:

mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

经过一番仔细的查找发现热门的数据存在:

mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

数据是json格式,还是我们熟悉的样子。观察对比参数发现,url接口的参数可以删掉一部分,代码参考:

import requests,json,re
# url='https://api.gotokeep.com/feed/v1/feed/list?feedType=hot'
url='https://api.gotokeep.com/feed/v1/feed/list?feedType=hot&lastId=&position=0&needCommentInfo=1&needLikeInfo=1&needFavoriteInfo=1&needRelationInfo=1&sort=byHeat'
headers={
    'User-Agent':'Keep+6.38.0%2FAndroid+5.1-23896+DOOV+DOOV+M1t'
}
html=json.loads(requests.get(url,headers=headers).content)
for i in html['data']['items']:
    item={}
    #详情页的url:https://api.gotokeep.com/community/v1/entries/5ddbc647c6c41c2b018b8d61
    item['detail_url']='https://api.gotokeep.com/community/v1/entries/'+i['entry']['id']
    item['images'] = i['entry']['images'] #图片
    item['username']=i['entry']['author']['username'] #用户名
    item['avatar_img']=i['entry']['author']['avatar'] #作者头像
    item['desc']=i['entry']['author']['desc'] #描述
    item['content']=i['entry']['content'] #内容
    print(item)

通过charles抓包,我们呢可以找到每一篇热门动态详情页的json数据和评论的json数据,在上面的代码中我只对某一个json数据进行抓取,在Keep刷新还会出现新的json数据。只是不知道该如何构造刷新之后的url接口,每次刷新url参数会变化,但是没有规律可循,也就是只能抓到一个url的数据。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例》 发布于2020-03-30

分享到:
赞(3) 赏杯咖啡

评论 1

6 + 7 =
  1. #1

    你好,请问你可以使用fiddle或者charles抓到keep手机app上的包吗,我操作是keep总是连不上网,其他的app都能正常运行,请指教!

    walking2周前 (10-06)回复

文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册