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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
详解Python3中字符串中的数字提取方法
Jan 14 Python
python字符串的方法与操作大全
Jan 30 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
使用python实现kNN分类算法
Oct 16 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
python 使用raw socket进行TCP SYN扫描实例
May 05 Python
python怎么判断素数
Jul 01 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
一些关于PHP的知识
2006/11/17 PHP
php中json_encode中文编码问题分析
2011/09/13 PHP
Laravel框架表单验证详解
2014/09/04 PHP
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
基于vue.js的分页插件详解
2017/11/27 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
Node.js之readline模块的使用详解
2019/03/25 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Python sys.argv用法实例
2015/05/28 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
如何做好总经理助理
2013/11/12 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
初中语文教学反思
2014/02/02 职场文书
倡议书范文格式
2014/05/12 职场文书
迎新晚会策划方案
2014/06/13 职场文书
钳工实训报告总结
2014/11/04 职场文书
东京审判观后感
2015/06/01 职场文书
2016中考冲刺决心书
2015/09/22 职场文书