如何从缩短的抖音 URL 中提取用户帐户名和视频 ID?

How to extract user account name and video id from a shortened tiktok URL?

我正在尝试从缩短的 URL 中获取 tiktok 视频的 URL,以便提取 poster 的@username 和post。我遇到的一些缩短 URL 的示例似乎以“m.tiktok.com”或更具体地说“https”的形式在 Facebook/Twitter 上共享 URL ://vm.tiktok.com/pF6GGf/”。 link 最终重定向到“https://www.tiktok.com/@blessy2flex/video/6796374554391448838...”。有什么方法可以让我只用缩短的 URL 得到这个 URL?

我希望能够从缩短的 URL 中获取用户名 (@blessy2flex) 和视频 ID (6796374554391448838),因为它出现在实际 URL 中。我试过跟踪重定向,但 URL 我以“https://m.tiktok.com/v/6833793010149412101.html...”结束,这显然不是一样。

我也尝试过像 Selenium 这样的东西,它实际上最终给了我原始视频页面的 HTML,我可以在其中通过搜索实际的 HTML,但这种方法似乎不太可扩展,因为我确定 tiktok 会注意到并减慢我的进程。

TikTok 可能没有向您正确重定向 URL,因为它正在检测您的 User-Agent。如果你用一些 'browser-like' User-Agent 更新你的 headers,它应该可以工作。

以下是解决问题的方法。

import re
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url = 'https://vm.tiktok.com/pF6GGf/'
response = requests.get(url, headers=headers)

print(response.url) # the correct url with the username

最后,您可以使用正则表达式找到用户名和视频 ID。

re.findall(r'(@[a-zA-z0-9]*)\/.*\/([\d]*)?',response.url)

OUTPUT: [('@blessy2flex', '6796374554391448838')]

额外:现代网络服务通常非常智能,有时可能有不同的机制来阻止爬行活动。如果您计划进行大量爬网(我假设 valid/legal),您还必须考虑请求 URL 页面的速率(以及许多其他因素)。如果您需要管理更多 user-agents,您可能会发现这个 pip 包很有帮助 (fake-useragent)。