python+mitmdump实战(3/3)(附源码)

(五)正式开始

因为被审核,所以本篇文章图比较少。

程序脚本如下
记得更改下数据存放的位置就可以了
下面程序里也有注释

import json
import csv

def parser_aweme_info(parser_aweme_info_data):
    aweme_data=[]
    # related_word=[]


    print("*"*100)
    print("解析视频信息数据")
    print("*" * 100)
    info_data=json.loads(parser_aweme_info_data)


    # related_words_dic={}

    for aweme_item in info_data["data"]:
        if "aweme_info" in aweme_item:
            aweme_dic = {}
            datas=aweme_item["aweme_info"]

            #作品基本信息
            aweme_dic["aweme_id"]=aweme_item["aweme_info"]["aweme_id"]
            aweme_dic["create_time"] =aweme_item["aweme_info"]["create_time"]
            aweme_dic["aweme_desc"]=aweme_item["aweme_info"]["desc"]
            aweme_dic["share_url"]=aweme_item["aweme_info"]["share_url"]
            aweme_dic["citycode"]=aweme_item["aweme_info"]["city"]
            aweme_dic["group_id"]=aweme_item["aweme_info"]["group_id"]
            aweme_dic["duration"]=aweme_item["aweme_info"]["duration"]

            #作品的统计信息
            aweme_dic["collect_count"]=aweme_item["aweme_info"]["statistics"]["collect_count"]
            aweme_dic["comment_count"]=aweme_item["aweme_info"]["statistics"]["comment_count"]
            aweme_dic["digg_count"]=aweme_item["aweme_info"]["statistics"]["digg_count"]
            aweme_dic["download_count"]=aweme_item["aweme_info"]["statistics"]["download_count"]
            aweme_dic["share_count"]=aweme_item["aweme_info"]["statistics"]["share_count"]

            #作者信息
            aweme_dic["nickname"]=aweme_item["aweme_info"]["author"]["nickname"]
            aweme_dic["aweme_count"]=aweme_item["aweme_info"]["author"]["aweme_count"]
            aweme_dic["enterprise_verify_reason"]=aweme_item["aweme_info"]["author"]["enterprise_verify_reason"]
            aweme_dic["follower_count"]=aweme_item["aweme_info"]["author"]["follower_count"]
            aweme_dic["gender"]=aweme_item["aweme_info"]["author"]["gender"]
            aweme_dic["is_gov_media_vip"]=aweme_item["aweme_info"]["author"]["is_gov_media_vip"]
            aweme_dic["is_verified"]=aweme_item["aweme_info"]["author"]["is_verified"]
            aweme_dic["uid"]=aweme_item["aweme_info"]["author"]["uid"]
            aweme_dic["unique_id"]=aweme_item["aweme_info"]["author"]["unique_id"]

            aweme_data.append(aweme_dic)
        # else:
        #     for word_item in aweme_item["related_word_list"]:
        #         related_words_dic["group_id"]=word_item["word_record"]["group_id"]
        #         related_words_dic["related_word"]=word_item["related_word"]
    # related_word.append(related_words_dic)

    print("*" * 100)
    print("解析完成!")
    print("*" * 100)
    return aweme_data

def save_aweme_data(data,path):
    header = list(data[0].keys())  # 数据列名
    with open(path, 'a+', newline='',encoding="gb18030") as f:
        writer = csv.DictWriter(f,fieldnames=header)
        writer.writerows(data)  # 写入数据

# def save_related_words_data(data,path):
#     header = list(data[0].keys())  # 数据列名
#     with open(path, 'a+', newline='',encoding="gb18030") as f:
#         writer = csv.DictWriter(f,fieldnames=header)
#         writer.writerows(data)  # 写入数据

def response(flow):
    if "/aweme/v1/search/item/?" in flow.request.url:
        # total_data=parser_aweme_info(flow.response.text)
        # info_data=total_data[0]
        # related_word=total_data[1]

        info_data=parser_aweme_info(flow.response.text)
        
        #下面这里换成你的数据存储的位置
        save_aweme_data(info_data,"D:/awemes_info_data.csv")
        
        # save_related_words_data(related_word,"D:/related_words_data.csv")

然后把这个代码复制到一个python 文件里(后缀带.py的程序文件)
自己取个名字
把这个文件放到之前再行powershell的文件夹下(Scripts文件夹下)
我的是aweme_info_scripts.py
移动后,然后再在这里打开powershell命令行
输入
mitmdump -s 文件名(带后缀的)-p 端口号

我的就是

mitmdump -s aweme_info_scripts.py -p 8889

【注意:每处有空格】

再次打开模拟器 打开d音
搜索框
在这里搜索你想要的关键词
比如我搜的西安疫情
视频

你看powershell那里 已经有相应的url出现了,mitmdump把里面数据包抓到了。
有上面的输出后,就说明已经执行一次了
随着你在模拟器内不断滑屏,就会有更多新的相应url返回,那样就会继续抓包
会有不断的信息输出
需要我们一直用手一直滑屏吗?不需要的
因为我们模拟器有个功能就是代替我们滑屏
在右边栏里
有个三个点的,点一下在弹出的菜单栏里有一个叫操作录制的。

按F1 开始录制
用鼠标滚轮划一下屏**(不用多划,也不要划的太快)**
F2结束录制

就会有操作录制1,点播放,你会发现模拟器已经代替你划了一次屏

你可以在设置这里,设置滑动的次数
还可以执行循环
将执行间隔改一下**(最少1秒,因为0秒划得太快,手机因为是安卓5系统的,容易崩溃)**
然后点保存,再点开始

这样模拟器就帮你滑屏了,一般设置200下就够用了
注意划得动作不要太快,太快容易卡顿,d音程序会崩溃
崩溃也不要怕,就重新打开d音,powershell不用管,再重新爬取就ok了

慢慢的会滑到底部,然后你可以设置搜索条件
点击筛选

一般默认是综合排序,时间不限
你可以更改排序依据,比如最多点赞,最新发布
返回的视频大多数是没有刷到过的
因为d音的搜索一次性只会返回200-300个短视频
所以不同的排序依据,很有可能返回不同的搜索结果

这样有个问题就是:我们会爬取到重复数据,不用怕
我们在字段里有一个aweme_id的字段,不用的aweme_id代表不同的短视频
到时候对这个字段去重一下就可以(excel就能完成)

为了保证爬取视频的全面性,你可以尝试更换几个关键词重新爬
比如西安疫情 你可以换成西安确诊 等
其实你在滑动视频时,会时不时有相关关键词划出来,这些抖音提供的相关搜索关键词可以给你参考。

滑屏就使用操作录制代替

等你觉得爬取完成了,就把模拟器、powershell都关闭掉就可以了
然后到你的程序里面指定的数据存储地,找你的文件就可以了

【注意:等你这个数据爬取完毕后,你最好给你重命名下,因为等你爬下一个主题时,数据以后会在这个csv文件下存放数据,这样怕不好区分】

【PS:如果你有天开机后,发现自己主机上不了网,访问网络会报proxy_error,那是你开代理的问题,去网上搜一个教程就能解决】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值