一、背景说明

1.1 效果演示

您好!我是@马哥python说,一名10年程序猿。

我用python开发了一个爬虫采集软件,可自动抓取抖音评论数据,并且含二级评论!

为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python、无需懂代码,双击打开即用!

软件界面截图:

爬取结果截图:

以上。

1.2 演示视频

软件运行演示:【软件演示】抖音评论采集工具,可爬取上万条,含二级评论!

1.3 软件说明

几点重要说明:

1. Windows用户可直接双击打开使用,无需Python运行环境,非常方便

2. 需要填入cookie和爬取目标视频链接

3. 支持同时爬多个视频的评论

4. 可爬取10个关键字段,含:视频链接,页码,评论者昵称,评论者id(个人抖音号),评论者主>页链接,评论时间,评论IP属地,评论点赞数,评论级别,评论内容。

5. 评论中包含二级评论及二级展开评论。

二、代码讲解

2.1 爬虫采集模块

首先,定义接口地址作为请求地址:

# 请求地址
url = 'https://www.douyin.com/aweme/v1/web/comment/list/'

定义一个请求头,用于伪造浏览器:

# 请求头
h1 = {
'accept': 'application/json, text/plain, */*',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'cookie': '换成自己的cookie值',
'referer': 'https://www.douyin.com/',
'sec-ch-ua': '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'user-agent': ua,
}

其中,cookie是个关键参数,需要填写到软件界面里。cookie获取方法如下:

加上请求参数,告诉程序你的爬取条件是什么:

# 请求参数
params = {
'device_platform': 'webapp',
'aid': 6383,
'channel': 'channel_pc_web',
'aweme_id': video_id, # 视频id
'cursor': page * 20,
'count': 20,
'item_type': 0,
'insert_ids': '',
'rcFT': '',
'pc_client_type': 1,
'version_code': '170400',
'version_name': '17.4.0',
'cookie_enabled': 'true',
'screen_width': 1440,
'screen_height': 900,
'browser_language': 'zh-CN',
'browser_platform': 'MacIntel',
'browser_name': 'Chrome',
'browser_version': '109.0.0.0',
'browser_online': 'true',
'engine_name': 'Blink',
'engine_version': '109.0.0.0',
'os_name': 'Mac OS',
'os_version': '10.15.7',
'cpu_core_num': 4,
'device_memory': 8,
'platform': 'PC',
'downlink': 1.5,
'effective_type': '4g',
'round_trip_time': 150,
'webid': 7184233910711879229,
'msToken': 'LZ3nJ12qCwmFPM1NgmgYAz73RHVG_5ytxc_EMHr_3Mnc9CxfayXlm2kbvRaaisoAdLjRVPdLx5UDrc0snb5UDyQVRdGpd3qHgk64gLh6Tb6lR16WG7VHZQ==',
}

下面就是发送请求和接收数据:

# 请求地址
url = 'https://www.douyin.com/aweme/v1/web/comment/list/'
# 发送请求
r = requests.get(url, headers=h1, params=params)
# 转json格式
json_data = r.json()

定义一些空列表,用于存放解析后字段数据:

ip_list = []  # ip属地
text_list = [] # 评论内容
create_time_list = [] # 评论时间
user_name_list = [] # 评论者昵称
user_url_list = [] # 评论者主页链接
user_unique_id_list = [] # 评论者抖音号
like_count_list = [] # 点赞数
cmt_level_list = [] # 评论级别

循环解析字段数据,以"评论内容"为例:

# 循环解析
for comment in comment_list:
# 评论内容
text = comment['text']
text_list.append(text)

其他字段同理,不再赘述。

最后,是把数据保存到csv文件:

# 保存数据到DF
df = pd.DataFrame(
{
'目标链接': 'https://www.douyin.com/video/' + str(video_id),
'页码': page,
'评论者昵称': user_name_list,
'评论者id': user_unique_id_list,
'评论者主页链接': user_url_list,
'评论时间': create_time_list,
'评论IP属地': ip_list,
'评论点赞数': like_count_list,
'评论级别': cmt_level_list,
'评论内容': text_list,
}
)
# 保存到csv文件
if os.path.exists(result_file): # 如果文件存在,不再设置表头
header = False
else: # 否则,设置csv文件表头
header = True
df.to_csv(result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')

完整代码中,还含有:判断循环结束条件、时间戳转换、二级评论及二级展开评论的采集等关键实现逻辑,详见文末。

2.2 软件界面模块

软件界面采用tkinter开发。

主窗口部分:

# 创建日志目录
work_path = os.getcwd()
if not os.path.exists(work_path + "/logs"):
os.makedirs(work_path + "/logs")
# 创建主窗口
root = tk.Tk()
root.title('抖音评论采集软件 | 马哥python说')
# 设置窗口大小
root.minsize(width=850, height=650)

填写cookie控件:

# 【填入Cookie】
tk.Label(root, justify='left', font=('微软', 14), text='个人Cookie:').place(x=30, y=75)
entry_ck = tk.Text(root, bg='#ffffff', width=110, height=2, )
entry_ck.place(x=30, y=100, anchor='nw') # 摆放位置

填写视频链接控件:

# 【视频链接】
tk.Label(root, justify='left', font=('微软', 14), text='视频链接:').place(x=30, y=145)
note_ids = tk.StringVar()
note_ids.set('')
entry_nt = tk.Text(root, bg='#ffffff', width=110, height=14, )
entry_nt.place(x=30, y=170, anchor='nw') # 摆放位置

底部软件版权说明:

# 版权信息
copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)

以上。

2.3 日志模块

好的日志功能,方便软件运行出问题后快速定位原因,修复bug。

核心代码:

def get_logger(self):
self.logger = logging.getLogger(__name__)
# 日志格式
formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
# 日志级别
self.logger.setLevel(logging.DEBUG)
# 控制台日志
sh = logging.StreamHandler()
log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
# info日志文件名
info_file_name = time.strftime("%Y-%m-%d") + '.log'
case_dir = r'./logs/'
info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
when='MIDNIGHT',
interval=1,
backupCount=7,
encoding='utf-8')

日志文件截图:

三、获取源码及软件

完整python源码及exe软件,微信公众号"老男孩的平凡之路"后台回复"爬抖音评论软件"即可获取。点击直达


我是@马哥python说,一名10年程序猿,持续分享python干货中!

【GUI界面软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!的更多相关文章

  1. 前端福利,用 JS 就能实现抖音养号等诸多功能

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  2. 基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室

    一.项目简介 uni-liveShow是一个基于vue+uni-app技术开发的集小视频/IM聊天/直播等功能于一体的微直播项目.界面仿制抖音|火山小视频/陌陌直播,支持编译到多端(H5.小程序.Ap ...

  3. 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家.. 1.楼主首先使用Fiddler4来抓取手机抖音app这 ...

  4. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  5. Python3实现自动点赞抖音小姐姐

    什么是抖音 抖音是2016年9月上线的一款音乐创意短视频社交软件,是一个专注年轻人的15秒音乐短视频社区.用户可以通过这款软件选择歌曲,拍摄15秒的音乐短视频,形成自己的作品. 效果 抖音经常能刷到很 ...

  6. 视频剪辑软件调研:Adobe Premiere、会声会影、抖音短视频

    Adobe Premiere.会声会影.抖音短视频基本功能特点对比: 特点 Adobe Premiere 会声会影 抖音短视频 运行平台 Win7/Win8/Win10.macOS  Win7/Win ...

  7. Vue3.0短视频+直播|vue3+vite2+vant3仿抖音界面|vue3.x小视频实例

    基于vue3.0构建移动端仿抖音/快手短视频+直播实战项目Vue3-DouYin. 5G时代已来,短视频也越来越成为新一代年轻人的娱乐方式,在这个特殊之年,又将再一次成为新年俗! 基于vue3.x+v ...

  8. 教你用 Python 实现抖音热门表白软件

    之前在群里看到有人发了一个抖音上很火的小视频,就是一个不正经的软件,运行后问你是不是愿意做我的朋友,但你没法点击到「不同意」!并且没办法直接关闭窗口! 很不正经,很流氓,有点适合我. 效果大概是这样的 ...

  9. android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码

    Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...

  10. 抖音短视频爆火的背后到底是什么——如何快速的开发一个完整的直播app

    前言 今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,由于第一次接触的原因,因此花了很多时间了解直播,今天我来教你从零开始搭建一个完整的直播app,希望能帮助 ...

随机推荐

  1. windows 远程桌面 复制粘贴 无效

    rdpclip.exe进程没有运行或运行异常. rdpclip 是让rdp协议(远程桌面协议)可以通过远程复制文件的,如果你使用rdp(3389)远程连接别人或者被别人连接,通常这个进程都会启动,他的 ...

  2. quartus中的时序约束常用方法

    quartus中的时序约束常用方法 一.约束操作 quartus中有三种时序约束方法: 1️⃣Timing Setting 2️⃣Wizards/Timing Wizard 3️⃣Assignment ...

  3. 自定义AXI总线IP之补全寄存器的输入输出配置

    自定义AXI总线IP之补全寄存器配置输入和输出 1.实验目的 在使用默认的AXI4的配置时,不会有寄存器的配置,无法配置端口的输入还是输出.根据前面的AXI总线的理解,这里通过仲裁器判断,将AXI4的 ...

  4. QT 自定义插件问题 error: LNK2001: 无法解析的外部符号

    为了重复利用已有的代码,我使用自定义插件进行开发.当每个插件独立开发时没有遇到问题,但是当插件B引用了插件A时就会在编译时报错 error: LNK2001: 无法解析的外部符号. 例如,先定义一个插 ...

  5. 如何在Java中读取超过内存大小的文件

    读取文件内容,然后进行处理,在Java中我们通常利用 Files 类中的方法,将可以文件内容加载到内存,并流顺利地进行处理.但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大.此时, ...

  6. 关于Guava ForwardingMap

    ForwardingMap是什么? ForwardingMap 是一个装饰器 负责把所有的map操作转发到所代理的map. 操作转发是直接的,不经任何中间操作的. 对方法的覆写要慎重,比如关联的put ...

  7. 实用 Linux 命令 Windos 命令 实例演示 持续更新中

    实用 Linux 命令 Windos 命令 实例演示 持续更新中 目录 实用 Linux 命令 Windos 命令 实例演示 持续更新中 Linux 命令 [Command [options] [lo ...

  8. 密码学系列之:SAFER

    密码学系列之:SAFER 简介 分组密码是一个非常优秀的加密结构,很多常用加的加密算法使用的都是分组算法,比如DES.SAFER表示的也是一种分组密码算法.一起来看看吧. SAFER简介 SAFER的 ...

  9. node nvm使用

    背景 node 经过了一次大的改变,直接从8到了10,差别很大,但是有的项目又需要用到8,这个时候不能完全升级. 所以我们需要一个管理虚拟环境的工具. 安装 https://github.com/co ...

  10. python 远程windows系统执行cmd命令

    如果你的服务器是windows系统,不想一台一台mstsc远程到桌面上去操作,python是有模块可以远程处理的:winrm pip install pywinrm 安装模块即可 windows系统服 ...