嗨,各位技术爱好者和数据挖掘狂热者们!你是否曾经在抖音上看到一个超赞的用户,想要保存他们的视频以便离线观看?或者你是一位研究者,需要获取某个用户在一段时间内发布的所有视频?今天,我将带你进入一个令人兴奋的抖音爬虫之旅,教你如何使用Python来实现这一目标。
1. 准备工作
在开始之前,请确保你已经安装了以下依赖库:
requests
:用于发送HTTP请求以获取抖音数据。json
:用于处理JSON数据。os
:用于文件和目录操作。time
:用于处理时间。re
:用于正则表达式匹配。pandas
:用于数据处理。
你可以使用pip
来安装这些库:
pip install requests json os time re pandas
2. 编写代码
以下是完整的Python代码,它可以根据抖音用户的分享链接,获取用户的视频并保存到本地:
import requests
import json
import os
import time
import re
import pandas as pd
# 删除字符串中的无关字符的函数
def delete_boring_characters(sentence):
return re.sub('[0-9’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’![\\]^_`{|}~\s]+', "", sentence)
# 设置请求头信息
headers = {
"user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36"
}
# 输入抖音分享链接
string = input('粘贴分享链接:')
# 提取短链接
short_url = re.findall('[a-z]+://[\S]+', string, re.I | re.M)[0]
# 发送初始请求,获取重定向的URL
start_page = requests.get(url=short_url, headers=headers, allow_redirects=False)
location = start_page.headers['location']
# 提取用户sec_uid
sec_uid = re.findall('(?<=sec_uid=)[a-zA-Z0-9_-]+', location, re.M | re.I)[0]
# 根据sec_uid获取用户信息
user_info_url = 'https://www.iesdouyin.com/web/api/v2/user/info/?sec_uid={}'.format(sec_uid)
user_info_data = requests.get(url=user_info_url, headers=headers).text
user_info = json.loads(user_info_data)
user_name = user_info['user_info']['nickname']
# 创建以用户名为名的文件夹
folder_path = user_name
if not os.path.exists(path=folder_path):
os.mkdir(path=folder_path)
else:
print('目录已存在')
os.chdir(path=folder_path)
# 时间段池
time_pool = list(pd.date_range(start='2022-10-22 00:00:00', end='2022-10-23 00:00:00', freq='D'))
time_pool = list(map(str, time_pool))
# 获取时间段的视频
k = len(time_pool)
for i in range(k - 1):
print('开始时间:' + time_pool[i])
print('结束时间:' + time_pool[i + 1])
num_str = time_pool[i][0:8]
begin_array = time.strptime(time_pool[i], "%Y-%m-%d %H:%M:%S")
end_array = time.strptime(time_pool[i + 1], "%Y-%m-%d %H:%M:%S")
t1 = int(time.mktime(begin_array) * 1000)
t2 = int(time.mktime(end_array) * 1000)
# 构建视频列表请求参数
params = {
'sec_uid': sec_uid,
'count': 200,
'min_cursor': t1,
'max_cursor': t2,
'aid': 1128,
'_signature': 'PtCNCgAAXljWCq93QOKsFT7QjR'
}
# 发送视频列表请求
aweme_url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?'
aweme_data = requests.get(url=aweme_url, params=params, headers=headers).text
aweme_json = json.loads(aweme_data)
aweme_count = len(aweme_json['aweme_list'])
print('视频数量:', aweme_count)
for j in range(aweme_count):
print('视频编号:', j)
video_title = aweme_json['aweme_list'][j]['desc'].replace("?", "").replace("\"", "").replace(":", "")
video_id = aweme_json['aweme_list'][j]['aweme_id']
video_url = aweme_json['aweme_list'][j]['video']['play_addr']['url_list'][0]
start_time = time.time()
print('{} ===> 下载中'.format(video_title))
print('视频ID:', video_id)
with open(video_id + '-' + delete_boring_characters(video_title) + '.mp4', 'wb') as video_file:
try:
video_file.write(requests.get(url=video_url, headers=headers).content)
end_time = time.time()
download_time = end_time - start_time
print('{} ===> 下载完成 ===> 耗时 {} 秒'.format(video_title, download_time))
except Exception as e:
print('下载出错')
3. 如何运行
- 打开终端或命令提示符,进入包含你的Python文件的目录。
- 运行Python文件,粘贴抖音用户的分享链接。
- 程序将自动获取用户信息,并根据指定时间段获取用户发布的视频,保存到以用户名为名的文件夹中。
4. 结语
通过这篇教程,你学会了如何使用Python爬取抖音用户的视频。这是一个有趣的项目,可以让你保存你最喜欢的抖音视频,或者用于研究和分析用户的行为。希望你能够成功完成这个项目,并在实际应用中充分发挥这些技能。
如果你有任何问题或需要进一步的帮助,请随时留言,我将尽力解答。祝你在抖音视频爬取的旅程中取得成功!