从 TikTok 抓取并下载有用信息。
无需登录或密码。
这不是官方 API 支持等。这只是一个使用 TikTok Web API 抓取媒体的爬虫。
注意:
帖子 - JSON/CSV 输出:
id: '6748606789551410438',
text:'TEXT',
createTime: '1571282470',
authorId: '123123',
musicId: '123123',
videoUrl: 'VIDEO_URL',
diggCount: 485,
shareCount: 1,
commentCount: 24

可能的错误
tiktok-scraper 需要 Node.js v8.6.0+ 才能运行。
从 NPM 安装
$ npm i -g tiktok-scraper
从 YARN 安装
$ yarn global add tiktok-scraper
$ tiktok-scraper --help
用法: tiktok-scraper <command> [options]
命令:
tiktok-scraper user [id] 根据用户名抓取视频。只输入用户名
tiktok-scraper hashtag [id] 根据话题标签抓取视频。输入不带 # 的话题标签
tiktok-scraper trend 从当前趋势抓取帖子
选项:
--help, -h 帮助 [布尔值]
--version 显示版本号 [布尔值]
--number, -n 要抓取的帖子数量。如果设置为 0,则抓取全部帖子 [默认: 20]
--proxy, -p 设置代理 [默认: ""]
--timeout 如果收到 'rate limit' 错误,可以尝试设置超时时间。超时时间以毫秒为单位:1000 毫秒 = 1 秒 [默认: 0]
--download, -d 下载所有抓取的视频并将其归档为 ZIP 文件 [布尔值] [默认: false]
--filepath 保存所有输出文件的目录。
[默认: "/Users/jackass/Documents/lang/NodeJs/tiktok-scraper"]
--filetype, --type, -t 输出文件类型,用于保存帖子信息。'all' - 将所有帖子的信息保存到 'json' 和 'csv'
[选项: "csv", "json", "all"] [默认: "csv"]
示例:
tiktok-scraper user USERNAME -d -n 100
tiktok-scraper hashtag HASHTAG_NAME -d -n 100
tiktok-scraper trend -d -n 100
示例 1: 从用户 {USERNAME} 抓取 300 个视频帖子。将帖子信息保存为 CSV 文件(默认)
$ tiktok-scraper user USERNAME -n 300
输出:
CSV 路径: /{CURRENT_PATH}/user_1552945544582.csv
示例 2: 从话题标签 {HASHTAG_NAME} 抓取 100 个帖子,下载并保存为 ZIP 压缩包。将帖子信息保存为 JSON 和 CSV 文件(--filetype all)
$ tiktok-scraper hashtag HASHTAG_NAME -n 100 -d -t all
输出:
ZIP 路径: /{CURRENT_PATH}/hashtag_1552945659138.zip
JSON 路径: /{CURRENT_PATH}/hashtag_1552945659138.json
CSV 路径: /{CURRENT_PATH}/hashtag_1552945659138.csv
示例 3: 从趋势部分抓取 50 个帖子,下载为 ZIP 并保存信息到 CSV 文件
$ tiktok-scraper trend -n 50 -d -t csv
输出:
ZIP 路径: /{CURRENT_PATH}/trend_1552945659138.zip
CSV 路径: /{CURRENT_PATH}/tend_1552945659138.csv
为了更好的显示效果,下载帖子时将在终端中显示进度
Downloading 6750670497744309509 [==============================] 100%
Downloading 6749962264020782342 [==============================] 100%
Downloading 6749433991113264390 [==============================] 100%
Downloading 6750671571968429318 [==============================] 100%
Downloading 6750668198011505926 [==============================] 100%
Downloading 6748611221903117574 [==============================] 100%
Downloading 6748606789551410438 [==============================] 100%
Downloading 6748139550251535621 [==============================] 100%
Downloading 6748616311166799110 [==============================] 100%
Downloading 6748048372625689861 [==============================] 100%
const TikTokScraper = require('tiktok-scraper');
let options = {
number: 100,
};
(async () => {
try{
let posts = await TikTokScraper.user({USERNAME}, options);
console.log(posts)
} catch(error){
console.log(error)
}
})()
Promise 将返回当前结果
{
collector:[ARRAY_OF_DATA]
//If {filetype} and {download} options are enbabled then:
zip: '/{CURRENT_PATH}/user_1552963581094.zip',
json: '/{CURRENT_PATH}/user_1552963581094.json',
csv: '/{CURRENT_PATH}/user_1552963581094.csv'
}
const TikTokScraper = require('tiktok-scraper');
let options = {
count: 100,
event: true, // Enable event emitter, you won't be able to use promises
};
let posts = TikTokScraper.user({USERNAME}, options);
posts.on('data', (json) => {
//data in JSON format
})
posts.on('done', () => {
//completed
})
posts.on('error', (error) => {
//error message
})
函数
.user(id, options) // 从指定用户抓取帖子
.hashtag(id, options) // 从话题标签部分抓取帖子
.trend('', options) // 从趋势部分抓取帖子
选项
let options = {
// 要抓取的帖子数量:{int 默认: 20}
number: 50,
// 设置代理,示例:127.0.0.1:8080:{string 默认: ''}
proxy: '',
// 启用或禁用事件发射器。如果为 true,则可以通过事件接收数据:{boolean 默认: false}
event: false,
// 请求之间的超时时间。如果收到 'rate limit' 错误,此选项可能有用:{int 默认: 0}
timeout: 0
// 是否下载帖子。如果为 true,将在 {filepath} 中创建 ZIP 压缩包:{boolean 默认: false}
download: false,
// 异步下载的帖子数量。仅在 {download:true} 时有效:{int 默认: 5}
asyncDownload: 5,
// 保存所有文件的目录路径:{string 默认: 'CURRENT_DIR'}
filepath: `CURRENT_DIR`,
};
MIT
自由软件