(五)正式开始
因为被审核,所以本篇文章图比较少。
程序脚本如下
记得更改下数据存放的位置就可以了
下面程序里也有注释
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,那是你开代理的问题,去网上搜一个教程就能解决】