利用Charles以及模拟器的录制功能,巧妙的爬取抖音数据。

前言

之前使用过python直接爬取抖音用户的Uid。但是遇到了颇多麻烦事。
麻烦事1:
例如爬过抖音的都知道,爬取抖音用户的时候,通过share页面,能够获取抖音的用户数据,但是uid需要对数字做字符集映射。
麻烦事2:
再例如,在获取抖音数据的时候,经常会出现response为200,但是data为空,后来经过测试以及优秀的百度,发现再向抖音请求数据的要不断的获取,才会给你一次。这就涉及到了一个问题,多少次请求一次比较合适,因为短时间内请求多次,很容易被发现,因此封一段时间。

然后我就在想,有没有一种方式,更加快捷。因此我发现,既然能够从charles获取到抖音数据,能不能通过不断的刷抖音,获取charles数据,然后把charles的数据导出,通过python解析,也就获得了抖音的数据了。
因此我试着去尝试获取一个抖音大V的所有粉丝的Uid。

一:环境

编写语言:python
模拟器:网易mumu模拟器
抓包工具:charles

二、从charles导出数据

例如我想要获取这里的所有的followers。当不断刷抖音粉丝的时候,
/aweme/v1/user/follower/list/
这个文件夹下,会不断的刷出该用户的粉丝,每次将获得20个粉丝。那么我们只需要把自动化把这个文件夹下的文件导出,然后利用python获取里面的json数据即可,这样就能获得用户的粉丝信息。

image.png

点击tool的Mirror


image.png

image.png

选择Enable Mirror以及Only for selected locations
Save to: 则选择自己想要保存的地址,我这边直接保存在项目的文件夹里,
然后add

image.png

添加你想要获取的某个文件夹下的文件。比如我要获取follower/list的数据
然后当你的charles这个文件夹有数据的时候,就会自动的保存该文件夹的数据到你自己填写的保存地址。如下,我保存着自己的项目里
(old文件夹是我自己创建的用于放置以利用过的数据,新建的是没有这个文件夹的)
image.png

至此,charles已经设置完了。

三、python该如何获取刚刚保存的数据

创建了一个read_charles的py文件

首先定位刚刚从charles获取的数据,如我上图,一系列的文件
files为该文件夹下的所有文件。

# path为该项目下的刚刚利用charles获取的文件的地址
# files为该文件夹下所有的文件()
path = os.path.join(os.path.dirname(__file__), os.pardir, 'douyin_crawling/charles/aweme-lq.snssdk.com/aweme/v1/user/follower/list')
files = os.listdir(path)

该方法主要是循环的对files下的每一个file进行数据读取。并且把读取过的数据放入old这个文件夹,这边建议跟我一样建立一个在list文件加下创建一个old文件夹。(没建立,则将shutil.move(file_data, old_file_path) 该行注释掉即可)

# 从charles获取的文件中读取数据到uids
    def read_data(self):
        try:
            for file in files:
                # 因为我建立了一个old文件夹,存放读取过的文件,因此要过滤掉old这个文件夹
                if file == 'old':
                    continue

                # file_data为文件地址加上文件名,定位到这个文件
                file_data = os.path.join(path, file)
                # old_file_path为地址加上old文件名,定位到这个old文件
                old_file_path = os.path.join(path, 'old')

                # 从文件中读取数据,并且将数据转化为json形式
                fp = open(file_data, 'r')
                data = json.load(fp)
                fp.close()

                # 将已读取的文件夹移动到old这个文件加下,以免重复读取
                shutil.move(file_data, old_file_path)

                # 读取获取的抖音粉丝的uid,放入set
                for i in range(len(data['followers'])   ):
                    uid = data['followers'][i]['uid']
                    self.uids.add(uid)

        except Exception as e:
            print('read data error[', e.__traceback__.tb_lineno, ']: ',  e)
            time.sleep(10)

其余的没什么好说的,自行看代码。
完整代码如下:

import shutil, os
import json
import time

# path为该项目下的刚刚利用charles获取的文件的地址
# files为该文件夹下所有的文件()
path = os.path.join(os.path.dirname(__file__), os.pardir, 'douyin_crawling/charles/aweme-lq.snssdk.com/aweme/v1/user/follower/list')
files = os.listdir(path)

# 获取charles获取的所有抖音大V的粉丝的UId
class ReadCharles():
    def __init__(self):
        # 将所有的uid存进一个set集里
        self.uids = set()

    # 从charles获取的文件中读取数据到uids
    def read_data(self):
        try:
            for file in files:
                # 因为我建立了一个old文件夹,存放读取过的文件,因此要过滤掉old这个文件夹
                if file == 'old':
                    continue

                # file_data为文件地址加上文件名,定位到这个文件
                file_data = os.path.join(path, file)
                # old_file_path为地址加上old文件名,定位到这个old文件
                old_file_path = os.path.join(path, 'old')

                # 从文件中读取数据,并且将数据转化为json形式
                fp = open(file_data, 'r')
                data = json.load(fp)
                fp.close()

                # 将已读取的文件夹移动到old这个文件加下,以免重复读取
                shutil.move(file_data, old_file_path)

                # 读取获取的抖音粉丝的uid,放入set
                for i in range(len(data['followers'])   ):
                    uid = data['followers'][i]['uid']
                    self.uids.add(uid)

        except Exception as e:
            print('read data error[', e.__traceback__.tb_lineno, ']: ',  e)
            time.sleep(10)

    def operate(self):
        try:
            print(len(files))
            self.read_data()
            print(len(self.uids))

        except Exception as e:
            print('operate error[', e.__traceback__.tb_lineno, ']: ',  e)
            time.sleep(10)

if __name__ == '__main__':


    obj = ReadCharles()
    obj.operate()
    print(len(obj.uids))
    print(obj.uids)

结果如下:截取部分数据,一共获取了60个抖音粉丝的uid


image.png

四、利用模拟器,实现自动化的刷粉丝获取charles数据

1、下载模拟器

没试过其他模拟器是否能够实现录制功能。笔者下载的是网易的mumu模拟器。
如果其他模拟器也可以,则也可以使用其他模拟器。

2、配置charles

模拟器中,长按wifi,修改网络


image.png

手动添加代理,代理的ip根据自己的charles上的显示来操作


image.png
image.png

然后打开浏览器,进入chls.pro/ssl,下载证书。
初次连接的时候,会在charles中弹出一个框,点击allow就好了,笔者这边无法截图。
然后安装证书,取名随意。
安装好后,打开任意软件看看是否能够通过charles获取数据。(例如打开百度)


image.png

成功。

3、下载抖音

因为高版本抖音会有很多反扒机制,例如SSL。这边可以下载低版本的抖音,笔者下载了4.3.3这个版本,还是可以用的。

4、开始录制

随便找了一个热门榜上的人的,点击他的粉丝,发现有300多万、、、


image.png

点击下方的操作录制
点击新建,然后就可以实现操作的录制了。例如笔者这边的操作是下滑抖音粉丝列表。
操作录制完之后如图所示,指定循环次数,循环时间等,
这样你就会看到你的Charles里面,不断的在获取新的粉丝数据。


image.png

笔者稍微小试了一会儿,就获取了n条数据


image.png

五、获取到足够的数据之后,回到python

运行,即可获取所有的粉丝的数据了。如图,笔者获取了抖音大V的1000个粉丝,全部放在一个set集里面


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

推荐阅读更多精彩内容

  • 今天偶然刷微博看到之前何炅应该是录《世界青年说》的节目吧,其中一段节选就是,他谈:梦想不仅仅是用来实现的。 其实应...
    把心开好阅读 334评论 0 9
  • 痛哭!眼部泪沟自体脂肪填充后很后悔、自体脂肪填充就我毁了?有不少小仙女还不到30岁就出现了泪沟,忍不住做了自体脂肪...
    tongben0405阅读 31,667评论 0 0
  • “旁友,要票子哇”看完爱情公寓 ,对这句话津津乐道,说的就是黄牛。 本人表示对于黄牛深恶痛绝,毕业前南漂创业,做农...
    麻团ER阅读 378评论 0 1
  • 改革腾飞四十秋,春风化雨沐神州。 航空母舰登新路,九号神舟任远遊。 两百方针民意喜,城乡一体用心周。 和谐共筑中华...
    林野轻风阅读 197评论 0 1
  • 今天好累啊 每天都会学到新的东西,问自己为什么要活的这么努力,因为想变得更强。 每天坚持去做一件事情,可我发现这样...
    金橘锦鲤阅读 193评论 0 0