Tiktok 关键字 视频及评论信息爬虫(2) [2025.04.07]

🙋‍♀️Tiktok APP的基于关键字检索的视频及评论信息爬虫共分为两期,希望对大家有所帮助。
第一期:基于关键字检索的视频信息爬取
第二期见下文。

1.Node.js环境配置

首先配置 JavaScript 运行环境(如 Node.js),用于执行加密签名代码。
Node.js下载网址:https://nodejs.org/en
Node.js的安装方法(环境配置非常关键,决定了后面的程序是否可以使用):https://blog.csdn.net/liufeifeihuawei/article/details/132425239

2. Py环境配置

import random
from tqdm import tqdm
import requests
from urllib.parse import urlparse, urlencode
import warnings
from urllib3.exceptions import InsecureRequestWarning
import time# 忽略 InsecureRequestWarning 警告
warnings.filterwarnings("ignore", category=InsecureRequestWarning)

3. 基于视频URL的评论信息爬取

在上期中,已经给出了如何获得指定视频的URL,下面给出根据URL获得视频评论的信息,允许在爬取的过程中对评论进行翻页

1. 主程序

爬单个URL的评论信息的方法:

if __name__ == '__main__':'''单条数据'''req_url = "https://www.tiktok.com/@resep_debm/video/7475545671383174406"tiktok_comment = TiktokComment()x = tiktok_comment.get_comment_list(req_url)print(x)

爬多个URL的评论信息的方法。通过读取videosInfo.json文件中保存的URL信息,将最后的结果保存到videos_comments.json文件中:

if __name__ == '__main__':'''多条数据'''data = read_json('../results/videosInfo.json')print(len(data))tiktok_comment = TiktokComment()new_data = data.copy()for i in tqdm(range(len(data))):if 'comments' not in data[i].keys():  #  and i > 1695comments = tiktok_comment.get_comment_list(data[i]['video_url'])if comments != []:new_data[i]['comments'] = commentselse:continueif i % 10 == 0:write_json('../results/videos_comments.json', new_data)# 循环结束后再保存一次,确保所有数据都被写入write_json('../results/videos_comments.json', new_data)

2. 定义TiktokComments类
允许获得的评论信息7个字段,包括:
🎰评论ID;
💬评论内容;
🙋评论是否被作者点赞;
😍评论是否热门;
👍评论的点赞数
👀评论的回复数目
⌛评论发布的时间;

class TiktokComments:def __init__(self):# self.config = read_config()self.common_utils = CommonUtils()self.cookies = cookie_str_to_dict(read_cookie())# self.proxies = self.config.get("proxies", None)  # 代理配置self.comment_list_headers = {'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"','sec-ch-ua-mobile': '?0','User-Agent': self.common_utils.user_agent,'sec-ch-ua-platform': '"Windows"','Accept': '*/*','Sec-Fetch-Site': 'same-origin','Sec-Fetch-Mode': 'cors','Sec-Fetch-Dest': 'empty','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',}

通过 cursor_num设置翻页,count={comment_num}表示希望获得的评论总数目。

    def get_comment_list(self, video_url, comments_num=100):aweme_id = urlparse(video_url).path.split("/")[-1]ms_token = self.cookies['msToken']req_comments = []max_retries = 3  # 最大重试次数for i in range(comments_num // 20):cursor_num = i * 20comment_num = 20req_url = f"https://www.tiktok.com/api/comment/list/?WebIdLastTime=1715249710&aid=1988&app_language=ja-JP&app_name=tiktok_web&aweme_id={aweme_id}&browser_language=zh-CN&browser_name=Mozilla&browser_online=true&browser_platform=Win32&browser_version=5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%29%20AppleWebKit%2F537.36%20%28KHTML%2C%20like%20Gecko%29%20Chrome%2F123.0.0.0%20Safari%2F537.36&channel=tiktok_web&cookie_enabled=true&" \f"count={comment_num}&current_region=JP&cursor={cursor_num}&device_id=7366941338308609569&device_platform=web_pc&enter_from=tiktok_web&focus_state=true&fromWeb=1&from_page=video&history_len=2&is_fullscreen=false&is_non_personalized=false&is_page_visible=true&odinId=7367172442253296673&os=windows&priority_region=&referer=&region=GB&screen_height=1080&screen_width=1920&tz_name=Asia%2FShanghai&webcast_language=zh-Hans&msToken={ms_token}"xbogus = self.common_utils.get_xbogus(req_url, self.common_utils.user_agent)req_url += f'&X-Bogus={xbogus}&_signature=_02B4Z6wo000016M20awAAIDAnp.LMKuZmC-jNtUAAI6L17'for retry in range(max_retries):try:response = requests.request('GET',req_url,headers=self.comment_list_headers,# cookies=self.cookies,verify=False,timeout=random.randint(3, 7),# proxies=self.proxies)if response.status_code != 200:continuereq_json = response.json()comments = req_json.get('comments', [])# print(f"评论数目:{req_json.get('total')}")if not comments:print(f"No comments found for cursor {cursor_num}.")breakfor comment_item in comments:req_comments.append({"cid": comment_item.get('cid'),"comment": comment_item.get('text'),"comments_is_author_like": comment_item.get('is_author_digged'),"comments_is_hot": comment_item.get('is_comment_translatable'),"comments_like": comment_item.get('digg_count'),"comments_reply": comment_item.get('reply_comment_total'),"comments_time": comment_item.get('create_time')})break  # 成功获取数据,退出重试循环except Exception as e:print(f"Error: {e}. Retrying ({retry + 1}/{max_retries})...")if retry == max_retries - 1:print("Max retries reached. Skipping this request.")return req_comments

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab绘图—‘‘错误使用 plot输入参数的数目不足‘‘

原因1: ❤️ 文件列名不是合法变量名 在excel中数据列名称为Sample:float,将:删除就解决了

Kotlin问题汇总

Kotlin问题汇总 真机安装调试 查看真机的Android版本,将build.gradle文件中的minSdk改为手机的Android版本,点Sync Now更新设置 apk安装失败 在gradle.properties全局配置中设置android.injected.testOnlyfalse Unresolved reference: 在activity_…

基于VMware的Cent OS Stream 8安装与配置及远程连接软件的介绍

1.VMware Workstation 简介: VMware Workstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。…

Go语言从零构建SQL数据库(4)-解析器

SQL解析器:数据库的"翻译官"图解与代码详解 图解SQL解析过程 SQL解析器就像是人类语言与计算机之间的翻译官,将我们书写的SQL语句转换成数据库能够理解和执行的结构。 #mermaid-svg-f9gAqHutDLL4McGy {font-family:"trebuchet ms"…

十道海量数据处理面试题与十个方法总结

一、十道海量数据处理面试题 ♟️1、海量日志数据,提取出某日访问百度次数最多的那个IP。(分治思想 哈希表) 首先,从日志中提取出所有访问百度的IP地址,将它们逐个写入一个大文件中,便于后续处理。 考虑到IP地址是32位的&#…

SolidWorks2025三维计算机辅助设计(3D CAD)软件超详细图文安装教程(2025最新版保姆级教程)

目录 前言 一、SolidWorks下载 二、SolidWorks安装 三、启动SolidWorks 前言 SolidWorks 是一款由法国达索系统(Dassault Systmes)公司开发的三维计算机辅助设计(3D CAD)软件,广泛用于机械设计、工程仿真和产品开…

IntelliJ IDEA 2020~2024 创建SpringBoot项目编辑报错: 程序包org.springframework.boot不存在

目录 前奏解决结尾 前奏 哈!今天在处理我的SpringBoot项目时,突然遇到了一些让人摸不着头脑的错误提示: java: 程序包org.junit不存在 java: 程序包org.junit.runner不存在 java: 程序包org.springframework.boot.test.context不存在 java:…

CPU 压力测试命令大全

CPU 压力测试命令大全 以下是 Linux/Unix 系统下常用的 CPU 压力测试命令和工具,可用于测试 CPU 性能、稳定性和散热能力。 1. 基本压力测试命令 1.1 使用 yes 命令 yes > /dev/null & # 启动一个无限循环进程 yes > /dev/null & # 启动第二个进…

#SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系

在 SystemVerilog Assertions (SVA) 中,sequence 和 property 是两个核心概念,它们既有区别又紧密相关。对于初学者,可能不需要过多理解;但是要想写出复杂精美的断言,深刻理解两者十分重要。今天,我们汇总和学习一下该知识点。 1. 区别 特性sequenceproperty定义描述一系…

WordPress浮动广告插件+飘动效果客服插件

源码介绍 WordPress浮动广告插件飘动效果客服插件 将源码上传到wordpress的插件根目录下,解压,然后后台启用即可 截图 源码免费获取 WordPress浮动广告插件飘动效果客服插件

虚幻基础:蓝图基础知识

文章目录 组件蓝图创建时,优先创建组件,如c一样。 UI控件控件不会自动创建,而是在蓝图创建函数中手动创建。 函数内使用S序列接退出,并不会等所有执行完再退出,而是一个执行完后直接退出 组件 蓝图创建时,…

《AI大模型应知应会100篇》加餐篇:LlamaIndex 与 LangChain 的无缝集成

加餐篇:LlamaIndex 与 LangChain 的无缝集成 问题背景:在实际应用中,开发者常常需要结合多个框架的优势。例如,使用 LangChain 管理复杂的业务逻辑链,同时利用 LlamaIndex 的高效索引和检索能力构建知识库。本文在基于…

深度学习项目--分组卷积与ResNext网络实验探究(pytorch复现)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 ResNext是分组卷积的开始之作,这里本文将学习ResNext网络;本文复现了ResNext50神经网络,并用其进行了猴痘病分类实验…

从代码学习深度学习 - RNN PyTorch版

文章目录 前言一、数据预处理二、辅助训练工具函数三、绘图工具函数四、模型定义五、模型训练与预测六、实例化模型并训练训练结果可视化总结前言 循环神经网络(RNN)是深度学习中处理序列数据的重要模型,尤其在自然语言处理和时间序列分析中有着广泛应用。本篇博客将通过一…

JS DOM节点增删改查

增加节点 通过document.createNode()函数创建对象 // 创建节点 const div document.createElement(div) // 追加节点 document.body.appendChild(div) 克隆节点 删除节点

IMX6ULL学习整理篇——Linux使用更现代的GPIO操作简单设备

IMX6ULL学习篇——实战:使用设备树/Pinctl-gpio子系统驱动LED 前言 ​ 经过层层考验,我们即将接近现代的LED驱动的解决方案了。那就是使用最现代的方式开发一个简单的GPIO驱动外设。 ​ 如果您忘记了设备树的相关内容,请自行到笔者的上一篇…

2025-04-07 NO.3 Quest3 MR 配置

文章目录 1 MR 介绍1.1 透视1.2 场景理解1.3 空间设置 2 配置 MR 环境2.1 场景配置2.2 MR 配置 3 运行测试 配置环境: Windows 11Unity 6000.0.42f1Meta SDK v74.0.2Quest3 1 MR 介绍 1.1 透视 ​ 透视(Passthrough)是将应用的背景从虚拟的…

如何在 GitHub 上开源一个小项目:从创建到长期维护的完整指南

如何在 GitHub 上开源一个小项目:从创建到长期维护的完整指南 适用于 个人开发者、团队合作、企业开源,涵盖 Git 基础、GitHub 配置、最佳实践、社区互动、自动化 CI/CD 及长期维护策略。 📌 1. 注册 GitHub 账户 如果你还没有 GitHub 账户&…

【技术报告】GPT-4o 原生图像生成的应用与分析

【技术报告】GPT-4o 原生图像生成的应用与分析 1. GPT-4o 原生图像生成简介1.1 文本渲染能力1.2 多轮对话迭代1.3 指令遵循能力1.4 上下文学习能力1.5 跨模态知识调用1.6 逼真画质与多元风格1.7 局限性与安全性 2. GPT-4o 技术报告2.1 引言2.2 安全挑战、评估与缓解措施2.2.1 安…

React中的跨组件通信

在React中,跨组件通信有几种常见的方式。每种方式适用于不同的场景,下面是几种常见的跨组件通信方法: 1. 通过父子组件传递 Props 父组件可以通过 props 将数据传递给子组件,子组件只能接收和使用这些数据。 父组件&#xff08…