首页 > 解决方案 > 视频 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);
    });
    

标签: node.jsweb-scraping

解决方案


您的代码运行良好,但您需要对标头设置和保存文件进行一些调整。

这是一个工作示例:

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 请求:

  1. 调用TikTokScraper.getVideoMeta以获取视频 URL
  2. rp.get使用 VIDEO URL调用(作为您的脚本)

第二次调用将收到一个视频流,所以它不是人类可读的。但是将响应直接流式传输到文件-因为它是字节流-,您将能够打开它。


推荐阅读