python实现模拟器爬取抖音评论数据的示例代码


Posted in Python onJanuary 06, 2021

目标:

由于之前和朋友聊到抖音评论的爬虫,demo做出来之后一直没整理,最近时间充裕后,在这里做个笔记。
提示:大体思路 通过fiddle + app模拟器进行抖音抓包,使用python进行数据整理

安装需要的工具:

抖音部分:

模拟器下载好之后, 打开模拟器
在应用市场下载抖音

python实现模拟器爬取抖音评论数据的示例代码

对抖音进行fiddle配置,配置成功后就可以当手机一样使用了

一、工具配置及抓包:

我们随便打开一个视频之后,fiddle就会刷新新的数据包

python实现模拟器爬取抖音评论数据的示例代码

在json中找到视频地址:

python实现模拟器爬取抖音评论数据的示例代码

二、fiddler中添加下载视频评论代码

在fiddler中添加下载视频代码:注意两点:
(1)get后面的路径要随时看进行更换
(2)下载的路径要在fiddler下面自己新建

if (m_Hide304s && oSession.responseCode == 304) {
      oSession["ui-hide"] = "true";
    }
    
    if (oSession.uriContains("https://aweme.snssdk.com/aweme/v1/general/search/single/")){
      var strBody=oSession.GetResponseBodyAsString();
      var sps = oSession.PathAndQuery.slice(-58,);
      //FiddlerObject.alert(sps)
      var timestamp=new Date().getTime();
      var filename = "D:\抖音评论资料" + "/" + sps + timestamp + ".json";
      var curDate = new Date(); 
      var sw : System.IO.StreamWriter; 
      if (System.IO.File.Exists(filename)){ 
        sw = System.IO.File.AppendText(filename); 
        sw.Write(strBody); 
      } 
      else{ 
        sw = System.IO.File.CreateText(filename); 
        sw.Write(strBody); 
      } 
      sw.Close(); 
      sw.Dispose();

此段代码放到fiddler中的script的response中,如下图:添加好之后别忘记保存!!

python实现模拟器爬取抖音评论数据的示例代码

三、python执行代码pycharm新建py文件

程序执行代码:

import os
import json
import time
import requests
import re
import csv

class Douyin(object):

  def __init__(self):
    pass
    self.url1 = 'https://aweme.snssdk.com/aweme/v2/comment/list/?aweme_id=6885929189950737676&cursor=0&count=20&address_book_access=1&gps_access=1&forward_page_type=1&channel_id=0&city=310000&hotsoon_filtered_count=0&hotsoon_has_more=0&follower_count=0&is_familiar=0&page_source=0&os_api=25&device_type=VOG-AL00&ssmix=a&manifest_version_code=110301&dpi=240&uuid=868594157367551&app_name=aweme&version_name=11.3.0&ts=1603350069&cpu_support64=false&app_type=normal&ac=wifi&host_abi=armeabi-v7a&channel=aweGW&update_version_code=11309900&_rticket=1603350070959&device_platform=android&iid=1758845207590062&version_code=110300&mac_address=b0%3Ac4%3A2d%3Ad0%3Aed%3A38&cdid=7974198e-c4c0-49c2-bfaa-43686052706e&openudid=d0c6cffa7067bedd&device_id=844047245117672&resolution=720*1280&device_brand=HUAWEI&language=zh&os_version=7.1.2&aid=1128&mcc_mnc=46000'
    self.url2 = 'https://aweme.snssdk.com/aweme/v2/comment/list/?aweme_id=6885163969477086479&cursor=0&count=20'
    self.header = {
      'Accept-Encoding': 'gzip',
      'X-SS-REQ-TICKET': '1603350070957',
      'sdk-version': '1',
      'Cookie': 'install_id=1758845207590062; ttreq=1$34f012b99d70a66f681dc3d1f0b438fc1b161af3; d_ticket=77247c94236bf8055c233f8cabb6a5ddf3231; odin_tt=fccb20add45a15f08a2519eadcaaf22cba4b3f8f1fceec300a088407c2daf81ea76b260ef6c81dbc86dfedfea011f68c25238f9b3984fe4f5909441dfd1cc9c2; sid_guard=6de18a966e69dcbbf076f629a2ef6511%7C1603345424%7C5184000%7CMon%2C+21-Dec-2020+05%3A43%3A44+GMT; uid_tt=ba98af780b4e337f01463cf98a8afafd; sid_tt=6de18a966e69dcbbf076f629a2ef6511; sessionid=6de18a966e69dcbbf076f629a2ef6511',
      'x-tt-token': '006de18a966e69dcbbf076f629a2ef651189d3f6f73fd3d6319b543d50d2e2e5a4cf3e383f8da81f07e049bcf850de07d331',
      'X-Gorgon': '0404d8210000a6a3dca0dbc6b11483a82420c9a94dd050a3e511',
      'X-Khronos': '1603350070',
      'Host': 'aweme.nssdk.com',
      'Connection': 'Keep-Alive',
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
    }
    self.add = 'D:\抖音评论资料'
    self.videos_list = os.listdir('D:\抖音评论资料')
  def parse(self):
    '链接,内容,发布人昵称,发布时间,点赞数,评论数,分享数'
    lists = []
    for vid in self.videos_list:
      a = open('D:\抖音评论资料\{}'.format(vid),encoding='utf-8')
      content = json.load(a)
      for con in content['data']:
        meta = {}
        try:
          meta['title'] = con['aweme_info']['desc']
          meta['author_name'] = con['aweme_info']['author']['nickname']
          meta['u_name'] = con['aweme_info']['author']['unique_id']
          meta['create_time'] = con['aweme_info']['create_time']
          timeArray = time.localtime(meta['create_time'])
          meta['create_time'] = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
          meta['digg_count'] = con['aweme_info']['statistics']['digg_count']
          meta['comment_count'] = con['aweme_info']['statistics']['comment_count']
          meta['share_count'] = con['aweme_info']['statistics']['share_count']
          meta['share_url'] = con['aweme_info']['share_url']
        except:
          meta['title'] = ''
          meta['author_name'] = ''
          meta['u_name'] = ''
          meta['create_time'] = ''
          meta['digg_count'] = ''
          meta['comment_count'] = ''
          meta['share_count'] = ''
          meta['share_url'] = ''

        if meta['u_name'] == '':
          try:
            meta['u_name'] = con['aweme_info']['music']['owner_handle']
          except:
            meta['u_name'] = ''
        if meta['title'] == '':
          pass
        else:
          lists.append(meta)
          # print(meta)
    return lists

  def save_data(self, meta):
    header = ['share_url', 'title', 'author_name', 'u_name', 'create_time', 'digg_count', 'comment_count', 'share_count']
    print(meta)
    with open('test.csv', 'a', newline='', encoding='utf-8-sig') as f:
      writer = csv.DictWriter(f, fieldnames=header)
      writer.writeheader() # 写入列名
      writer.writerows(meta)

  def run(self):
    meta = self.parse()
    self.save_data(meta)

if __name__ == '__main__':
  douyin = Douyin()
  douyin.run()

运行代码后在代码执行目录下会生成一个excel

python实现模拟器爬取抖音评论数据的示例代码

ps:抖音不会一次性返回整个评论数据包,每次往下滑动评论区会多出26条评论数据,我们就可以利用模拟器进行滑动操作。

点击 更多>鼠标宏

python实现模拟器爬取抖音评论数据的示例代码

点击录屏之后,用鼠标往下滑动一次页面

python实现模拟器爬取抖音评论数据的示例代码

点击停止,就会将你刚才的操作保存下来

python实现模拟器爬取抖音评论数据的示例代码

点击设置 可以对刚才的操作进行循环播放,从而达到自动刷新评论区。

python实现模拟器爬取抖音评论数据的示例代码

到此这篇关于python实现模拟器爬取抖音评论数据的示例代码的文章就介绍到这了,更多相关python 拟器爬取数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python解决鸡兔同笼问题的方法
Dec 20 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
Python 搭建Web站点之Web服务器网关接口
Nov 06 Python
Python 基础教程之str和repr的详解
Aug 20 Python
Python实现图片转字符画的示例代码
Aug 21 Python
Python对多属性的重复数据去重实例
Apr 18 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
python实现堆排序的实例讲解
Feb 21 Python
Python列表切片常用操作实例解析
Mar 10 Python
Django框架请求生命周期实现原理
Nov 13 Python
如何在vscode中安装python库的方法步骤
Jan 06 #Python
如何利用python 读取配置文件
Jan 06 #Python
Pandas之缺失数据的实现
Jan 06 #Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 #Python
java字符串格式化输出实例讲解
Jan 06 #Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 #Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 #Python
You might like
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
初学JavaScript第二章
2008/09/30 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
详解JS预解析原理
2020/06/16 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python中的作用域规则详解
2015/01/30 Python
python实现在sqlite动态创建表的方法
2015/05/08 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
详解Python的循环结构知识点
2019/05/20 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
博士生入学考试推荐信
2013/11/17 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
本科毕业生自荐信
2014/06/02 职场文书
优秀教师个人材料
2014/12/15 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
锅炉工岗位职责
2015/02/13 职场文书
报案材料怎么写
2015/05/25 职场文书
学历证明范文
2015/06/16 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python