node.js - 视频 url 在节点 js 中使用 tiktok-package 显示为空
问题描述
我正在使用这个包在节点 js 中从 TikTok 中抓取数据。
问题
console.log(body) show encoded code
代码
const TikTokScraper = require('tiktok-scraper');
const rp = require('request');
const videoMeta = await getVideoMeta('https://www.tiktok.com/@tiktok/video/6889096755028233478');
var opt = {
uri: videoMeta.collector[0].videoUrl,
headers: videoMeta.headers
};
rp.get(opt, (error, response, body) => {
//according to documentation, In the body it will give the video URL,
//but it shows some encoded code
console.log(body);
});
解决方案
您的代码运行良好,但您需要对标头设置和保存文件进行一些调整。
这是一个工作示例:
const TikTokScraper = require('tiktok-scraper');
const got = require('got');
const fs = require('fs')
async function run() {
const headers = {
"User-Agent": "BOB",
"Referer": "https://www.tiktok.com/",
"Cookie": "tt_webid_v2=BOB"
}
const videoMeta = await TikTokScraper.getVideoMeta('https://www.tiktok.com/@tiktok/video/6889096755028233478', headers);
console.log(JSON.stringify(videoMeta, null, 2))
const url = videoMeta.collector[0].videoUrl
got
.stream(url, { headers: videoMeta.headers })
.pipe(fs.createWriteStream('out.mp4'));
}
run()
(我使用是got
因为request
维护者不推荐使用)
请注意,有两个 HTTP 请求:
- 调用
TikTokScraper.getVideoMeta
以获取视频 URL rp.get
使用 VIDEO URL调用(作为您的脚本)
第二次调用将收到一个视频流,所以它不是人类可读的。但是将响应直接流式传输到文件-因为它是字节流-,您将能够打开它。
推荐阅读
- mongodb - MongoDB-Community 未在 Mac 上启动并出现错误
- r - 使用数据框中的不同值替换字符串的某些相等元素
- apache-kafka - Kafka Streams Processor API:直接写入kafka statestore,然后写入topic以避免延迟
- r - 如何重塑我的数据框以在 R 中使用 TTR?
- c# - 创建 Linq orderby 扩展 C#
- arrays - 使用 bash 从带有双引号的目录列表构建一个数组
- flutter - 从另一个小部件路由时选择特定的 BottomNavigationBar (Flutter)
- python - jinja2.exceptions.UndefinedError: 'btn' 未定义
- python - ValueError:形状 (1, 4) 和 (1, 3) 不兼容
- python - 无法细化 .csproj 文件,尝试通过 NuGet 包 vscode 安装 selenium.webdriver