基于中间人截获的抖音爬虫

最近刚好有一个爬抖音的小需求(根据某关键字爬全部信息),网上找的都不是很满足自己的需求(或者说网页改版了),自己写了个比较通用(laji)的,有破解了抖音签名的能发我一份就更好了(不知羞耻脸)。

环境 :python3.x + requests + mitmproxy

首先配置好mitmproxy(不知道如何配置的看这里),抖音是HTTPs请求,所以也配好证书,抓包分析,这里不得不提到的一点是windows是用不了mitmproxy命令的,好在作者考虑到了,给了mitmweb,以及mitmdump,这里选择mitmweb便于分析:

抓包分析

这里抓包有个小技巧,我们是按照关键字搜索,所以一般链接里面会有search字段,搜索search就好。
点开还有search标记的链接,果然就是我们想要的数据:
请求数据

用工具重新请求:
请求后的数据

ok,想要的字段都在里面了。链接刷新几次果然就GG了:
多次请求后返回的数据

经多次验证,有三个字段是必须且不知道怎么生成的,好吧,我要的数据也不是很多,暂时通过这种中间截获在再解析的方式就够了。那么怎么拿到截获的数据呢?总不能每次都保存网页吧?这就是我选择mitmproxy的原因了,它是基于python的,且很容易进行中间的数据处理。详细说明请看这里
这里我们需要用到response事件进行截获后的数据处理就可以了,具体代码:

import mitmproxy.http
from mitmproxy import ctx, http
import urllib

import json 
class Spider(object):
    def __init__(self):
        pass
    
    def response(self, flow: mitmproxy.http.HTTPFlow):
        url = urllib.parse.unquote(flow.request.url)
        ctx.log.info(url)
        if 'api.amemv.com/aweme/v1/general/search/?' in url or 'api.amemv.com/aweme/v1/search/' in url:
            response = flow.response.get_text()
            self.parse_response(response)
        else:
            return
    
    def parse_response(self,response):
        response = json.loads(response)
        items = response.get('aweme_list')
        if items:
            for item in items:
                result = {}
                unique_id = item.get('author').get('unique_id')
                if unique_id:
                    result['id'] = unique_id #抖音号
                else:
                    result['id'] = item.get('author').get('short_id')
                result['nickname'] = item.get('author').get('nickname') #用户名
                result['url'] = item.get('share_url') #小视频链接
                result['like_num'] = item.get('statistics').get('digg_count') #点赞数
                result['comment_count'] = item.get('statistics').get('comment_count') #评论次数
                result['share_count'] = item.get('statistics').get('share_count') #分享次数
                result['info'] = item.get('desc') #视频说明
                if mongo.find(result) is None:
                    mongo.insert(result)
                    self.save_to_csv(result)

代码很简单,找到正常请求完的url所对应的数据进行解析就好,,最好不要像我上面那样都写在一起,这会导致手机页面卡在那等我处理完,可以拿出来解析,但是问题不大(主要是我懒)。
然后照着上面教程,加个 addons.py

import spider

addons = [
   spider.Spider()
]

cmd到当前目录,运行mitmdump -s addons.py,拿着手机不停滑动,大功告成。

数据

目前只实现半自动的,有兴趣的小伙伴可以试试加上appium实现全自动。
github链接

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 她忽然记起,很多年以前,雍曾拉着她的手说,你喜欢花,以后我们把家里的阳台上都放满花;窗帘用你最喜欢的浅蓝色,书房里...
    苏一格阅读 178评论 0 0
  • 1藏锋 显露锋芒,是使困厄加剧的原因 减少嫉妒 不轻易展示才学 当权者不是因为爱而爱,而是因为用而爱 警惕有名,珍...
    闻哥的文字小屋阅读 1,530评论 0 0
  • 尾随闭包(Trailing Closures) 如果你需要将一个很长的闭包表达式作为最后一个参数传递给函数,可以使...
    SheBang_阅读 276评论 0 0
  • 最是夕阳红,彤云染碧空。 窗前延寿客,檐下辟邪翁。 游子方新路,飞霜满旧蓬。 念君长顾盼,暮色上苍穹。 按仄起平收...
    铨斋阅读 986评论 29 29