在当今的社交媒体时代,抖音作为一个热门短视频平台,吸引了大量用户和内容创作者。对于研究和分析抖音上的热门视频及其互动数据(如点赞、评论、收藏等),自动化的数据采集工具显得尤为重要。本项目旨在开发一个基于关键词的自动化脚本,能够高效地采集抖音视频的排名及其互动数据。
通过输入关键词,脚本会自动访问抖音搜索页面,获取相关视频的详细信息,包括用户名、用户ID、粉丝数量、视频描述、视频时长、点赞数量、评论数量、收藏数量等。采集到的数据将以CSV和Excel格式保存,方便后续的数据分析和处理。
该工具不仅适用于市场研究、内容创作分析,还可以帮助企业和个人更好地了解抖音平台上的用户行为和内容趋势。通过自动化的数据采集,大大提高了工作效率,减少了人工操作的繁琐和误差。
一、运行结果
二、程序代码
import time
import datetime
import csv
import pandas as pd
from DrissionPage import ChromiumPage
# 创建文件对象并写入表头
with open('../data.csv', mode='w', encoding='utf-8', newline='') as f:
csv_writer = csv.DictWriter(f, fieldnames=['用户名', '用户uid', '用户ID', '粉丝数量', '发表时间', '视频awemeid',
'视频url', '视频描述', '视频时长', '点赞数量', '收藏数量', '评论数量',
'下载数量', '分享数量'])
csv_writer.writeheader()
# 打开浏览器并监听数据包
driver = ChromiumPage()
driver.listen.start('www.douyin.com/aweme/v1/web/search/item', method='GET')
# 获取关键词并访问网址
keyword = input('请输入关键词:')
url = f'https://www.douyin.com/search/{keyword}?type=video'
print(url)
driver.get(url)
def get_time(ctime):
return time.strftime("%Y.%m.%d", time.localtime(ctime))
def save_video_info(video_data):
minutes = video_data['video']['duration'] // 1000 // 60
seconds = video_data['video']['duration'] // 1000 % 60
video_dict = {
'用户名': video_data['author']['nickname'].strip(),
'用户uid': 'a' + str(video_data['author']['uid']),
'用户ID': video_data['author']['sec_uid'],
'粉丝数量': video_data['author']['follower_count'],
'发表时间': get_time(video_data['create_time']),
'视频awemeid': 'a' + video_data['aweme_id'],
'视频url': 'https://www.douyin.com/video/' + str(video_data['aweme_id']),
'视频描述': video_data['desc'].strip().replace('\n', ''),
'视频时长': f"{minutes:02d}:{seconds:02d}",
'点赞数量': video_data['statistics']['digg_count'],
'收藏数量': video_data['statistics']['collect_count'],
'评论数量': video_data['statistics']['comment_count'],
'下载数量': video_data['statistics']['download_count'],
'分享数量': video_data['statistics']['share_count'],
}
print(
f"用户名: {video_dict['用户名']}\n",
f"用户uid: {video_dict['用户uid']}\n",
f"用户ID: {video_dict['用户ID']}\n",
f"粉丝数量: {video_dict['粉丝数量']}\n",
f"发表时间: {video_dict['发表时间']}\n",
f"视频awemeid: {video_dict['视频awemeid']}\n",
f"视频url: {video_dict['视频url']}\n",
f"视频描述: {video_dict['视频描述']}\n",
f"视频时长: {video_dict['视频时长']}\n",
f"点赞数量: {video_dict['点赞数量']}\n",
f"收藏数量: {video_dict['收藏数量']}\n",
f"评论数量: {video_dict['评论数量']}\n",
f"下载数量: {video_dict['下载数量']}\n",
f"分享数量: {video_dict['分享数量']}\n"
)
return video_dict
data_list = []
for page in range(10):
print(f'正在采集第{page + 1}页的数据内容')
driver.scroll.to_bottom()
resp = driver.listen.wait()
json_data = resp.response.body
time.sleep(2)
if not json_data['has_more']:
break
for json_aweme_info in json_data['data']:
data = save_video_info(json_aweme_info['aweme_info'])
data_list.append(data)
header = ['用户名', '用户uid', '用户ID', '粉丝数量', '发表时间', '视频awemeid', '视频url', '视频描述', '视频时长',
'点赞数量', '收藏数量', '评论数量', '下载数量', '分享数量']
today_indx = datetime.date.today()
df = pd.DataFrame(data=data_list, columns=header)
df.to_excel(f'{keyword}-{today_indx}.xlsx', index=False)