从Tiktok刮擦并下载有用的信息。
这不是官方的API支持,等等。这只是使用Tiktok Web API刮擦媒体和相关元信息的刮板。
特征
做
贡献
安装
用法
方法
选项
与承诺一起使用
与事件一起使用
如何获取/设置会话值
如何访问/下载视频
输出示例
视频提要方法
GetUserProfileinfo
Gethashtaginfo
GetVideometa
GetMusicinfo
建造
跑步
终端示例
管理下载历史记录
批次刮擦和下载
输出文件示例
在终端
Docker
模块
截至目前,如果没有水印,就无法下载视频
从用户,主题标签,趋势或Music-ID页面下载无限的帖子元数据
将元数据保存到JSON/CSV文件
下载有或没有水印的媒体并保存到邮政编码文件
下载没有CLI的没有水印的单个视频
签署URL以向Tiktok API提出自定义请求
从用户,标签和单个视频页面中提取元数据
保存以前的进度,并仅下载以前未下载的新视频。此功能仅在CLI中起作用,只有在下载标志开始时才可用。
查看并管理CLI中先前下载的帖子历史记录
在批处理模式下在文件中指定的文件中刮擦和下载用户,主题标签,音乐提要和单个视频
CLI:节省进度以避免下载相同的视频
重写打字稿中的所有内容
改善代理支持
添加测试
下载没有水印的视频
在输出文件(CSV/JSON)中指示视频是否下载
从Docker建造和运行
CLI:批次刮擦和下载
CLI:从文件加载代理
CLI:可选拉链
更新API
设置Webhook URL(CLI)
添加新方法来收集音乐元数据
添加手动分页
改善文档
下载音频文件
Web界面
不要忘记测试
纱线测试
纱线构建
tiktok-scraper需要node.js v10+运行。
从NPM安装
NPM I -G Tiktok -Scraper
从纱线安装
纱线全球添加Tiktok-Scraper
$ tiktok-scraper-Help 用法:tiktok-scraper <命令> [选项] 命令: Tiktok-Scraper用户[ID]用户名刮擦视频。仅输入用户名 Tiktok-Scraper标签[ID]刮擦视频。输入没有#的标签 当前趋势的Tiktok-Scraper趋势刮擦柱 Tiktok-Scraper Music [ID]音乐ID编号的刮擦帖子 tiktok-Scraper视频[id]下载没有水印的单个视频 tiktok-scraper历史记录以前的下载历史记录 tiktok-Scraper From-File [file] [async]刮擦用户,主题标签,音乐,视频中提到了一个文件。每1行1个值 选项: - version显示版本号[布尔人] - 会议设置会话cookie值。有时会话可以是 从任何方法刮擦数据时会有所帮助[默认值:“”] - 带有主动会话列表的简单文件设置路径。一 每行会话! [默认: ””] - 请求之间设置超时。超时为毫秒: 1000 mls = 1 s [默认值:0] - 数字,-n刮擦帖子数量。如果您设置0,则 帖子将被刮擦[默认:0] - 在此日期之前没有发表任何帖子(时间戳)。 如果设置为0,则过滤器已停用[默认:0] -proxy,-p设置单个代理[默认值:“”] - 文件中的proxy-file使用代理。刮刀将使用随机代理 从每个请求的文件中。 1行1代理。 [默认: ””] - 下载,-d下载视频帖子,然后使用名称输入的文件夹 [id] [boolean] [默认值:false] -AsyncDownload,-a并发下载次数[默认值:5] -HD下载视频在高清中。视频尺寸将是X5-X10倍倍,这将影响刮板执行速度。这 选项仅与-w标志结合使用 [boolean] [默认值:false] - Zip,-z zip ast asl as lotoadevents ports [boolean] [默认值:false] - filepath文件路径以保存所有输出文件。 [默认值:“/users/karl.wint/documents/projects/javascript/tiktok-scraper”] -Filetype,-t类型的输出文件类型 保存。 'all' - 将有关所有帖子的信息保存到“ JSON”和“ CSV” [选择:“ CSV”,“ JSON”,“ ALL”,“”] [default:“”] -filename,-f Set输出文件的自定义文件名[默认值:“”] - nowatermark,-w下载视频,没有水印。注意:使用最近的更新,只有在刮擦标签feed时才需要使用此选项。用户/趋势/音乐提要将在默认情况下具有此URL [boolean] [默认值:false] - store,-s刮板将保存在OS TMP或自定义文件夹中的进度,将来用法只会下载避免重复的新视频[boolean] [default:false] - historyPath设置自定义路径,其中将存储历史文件/文件[默认:“/var/var/folders/d5/d5/d5/d5/fyh1_f2926q7c65g7c65g7skc0qh8000000 gn/t'] “类型:输入”或“全部”以清洁所有历史记录。例如:用户:bob [默认值:“”] - webhookurl设置Webhook URL,以作为HTTP请求接收刮板结果。例如,您自己的api [默认值:“”] - 方法以帖子或获取请求[选择:“ get”,“ post”] [default:“ post”] - help show show help [ boolean]Examples: tiktok-scraper user USERNAME -d -n 100 --session sid_tt=dae32131231 tiktok-scraper trend -d -n 100 --session sid_tt=dae32131231 tiktok-scraper hashtag HASHTAG_NAME -d -n 100 --session sid_tt= dae32131231 tiktok -scraper音乐音乐音乐:鲍勃tiktok-scraper历史 - r全部tiktok-scraper frof-file batch_file async_tasks -d
终端示例
管理下载历史记录
批次刮擦和下载
通过使用Docker,您将无法使用-V使用-V,但是可以使用-v设置卷(主机路径将保存所有文件)
Docker Build。 -t tiktok-Scraper
示例1:包括历史记录文件在内的所有文件都将保存在您从中运行Docker的目录($ PWD)中
docker run -v $(pwd):/usr/usr/app/files tiktok -scraper用户tiktok -d -n 5 -s
示例2:包括历史记录文件在内的所有文件都将保存在/用户/blah/下载中
docker run -v/user/blah/downloads:/usr/usr/app/files tiktok -scraper用户tiktok -d -n 5 -s
。 (Promise).Music(ID,选项)//按音乐ID(Promise)刮下帖子(Promise).useRevent(id,options)//来自特定用户的scrape帖子(event).hashtagevent(id,id,options)// scrape ports从趋势部分(event)的scrape post(evert).musicevent(id,options)//按音乐id(event).getUserProfileInfo('username',选项,选项)//获取用户配置信息信息。gethashtaginfo('ashtag',options)//获取ashtag inforges.signurl('url',options)//获取请求的签名。元信息,包括无需watermark.getmusicinfo('https://www.tiktok.com/music/original-sound-6801885499343571718',选项)//
const options = {//要刮擦的帖子数:{int默认值:20}编号:50,//自此日期发布以来发布的scrape帖子:{int默认:0}以来:0:0,//设置会话:{string [string []默认值:['']} //已验证的会话cookie值需要刮擦用户/趋势/音乐/主题feed //您可以在此处放置任何数量的会话,每个请求将从listSessionlist中选择随机会话:['sid_tt =' 21312213'],//设置代理{string [] |字符串默认值:'} // http proxy:127.0.0.1:8080// socks proxy:socks5:///127.0.0.1.1:8080 //您可以将代理传递为阵列和scraper,并将scraper从数组中随机选择一个,执行requestSproxy:'',//设置为{true}通过用户ID搜索:{boolean default:false} by_user_id:false:false,//应异步下载多少个帖子。仅当{download:true}:{int默认值:5} asyncDownload:5,//应该以异步刮擦多少个帖子:{int默认值:3} //当前选项仅适用于当前类型:music and hashtag/ hashtag/ /与其他类型一样,它始终为1,因为对Tiktok API的每个请求响应都提供了发送下一个requestAsyAsyncscraping所需的“ maxCursor”值:3,//文件路径,其中所有文件都将保存: :'current_dir'} filepath:`current_dir`,//输出文件的自定义文件名:{字符串默认:''} fileName:`current_dir`,//带有信息的输出可以将信息保存到CSV或JSON文件:{字符串默认值:'na'} //'csv'保存在csv //'json'中以保存在json //'ass'ass'all'中以保存在JSON和CSV //'NA'中以跳过此stepfiletype:`na` //设置自定义标题:用户代理,cookie等,等//注意:解析视频feed或单个视频元数据后,作为回报,您将收到{headers} object //用于提取信息并为了访问信息并通过接收到的视频{viverourl}值您需要使用相同的标头标题:{'user-agent':“ blah”,referer:'https://www.tiktok.com/', },//无需水印的视频下载视频:{boolean默认值:false} //设置为tree下载而没有水印//此选项将影响执行speednowatermark:false,//创建链接到高清视频:{boolean默认值:{boolean默认值: false} //仅当将{nowatermark}设置为{true} hdvideo:false,// verifyfp时,此选项才能工作将被验证码//被阻止//您可以设置自己的verifyfp value或默认值(硬编码)将被使用:'',// switch main主机到tiktok test test enpoint.///当您的请求被CACTCHA阻止时,您可以尝试使用tiktok test endpoints.usetestendpoints:false};
不要忘记检查示例文件夹
const tiktokscraper = require('tiktok-scraper'); //用户名(async(async()=> {try {const posts =等待tiktokscraper.user.user('username',',number',{number:100,sessionlist:sid_tt ='sid_tt ='sid_tt ='sid_tt =' 58BA9E344431774703D3C34E60D584475;']}); console.log(posts);} catch(error){console.log(error);}}}}}})(); // by用户id //一些tiktok用户feed by用户ID //一些tiktok用户ID比Max_s_safe_safe_safe_safe_safe_safe_sfe_safe_safe_sfe_safe_sfe_safe_sfe_safe_sfe_safe_sfe_sfe_safe_sfe_sfe_safe_sfe_safe_sertegeger ,您需要将用户ID传递为字符串(async()=> {try {const posts =等待tiktokscraper.user(`user_id`,{number:100,by_user_id:true,sessionlist:'sid_tt = 58bA9E34443434434434344344317777777703D3C3C3C3C3C34E60D555555555555555555555555555555555555555555555555555555555555555555555555555555555555555太; }); console.log(perts);} catch(error){console.log(error);}})(); //趋势feed(async(async()=> {try {const posts =等待tiktokscraper.trend( '',{编号:100,sessionList:['sid_tt = 58BA9E3444431774703D3C34E60D584475;']}); console.log(posts);} catch(error)catch(error) feed(async()=> {try {const posts =等待tiktokscraper.hashtag('ashtag',{number:100,sessionlist:['sid_ttt = 58ba9e344444447474703d3c33c34e60d34e60d584475;错误){console.log(error);}})()(); //获取单个用户配置文件信息:关注者的数量和etc // input -username // username // options-不需要(async(async()=> {try {const {const {const {const user =等待tiktokscraper.getuserprofileinfo('username',options); console.log(user);} catch(error){console.log(error);}}}}}) and etc // input -ashtag name // options-不需要(async()=> {try {const asshtag =等待tiktokscraper.gethashtaginfo('ashtag',options',options); console.log(hashtag);} {console.log(error);}})();// Get single video metadata// input - WEB_VIDEO_URL// For example: https://www.tiktok.com/@tiktok/video/6807491984882765062// options -不需要(async()=> {尝试{const videmeta =等待tiktokscraper.getVideometa('https://wwwww.tiktok.com./@tiktok/@tiktok/video/6807491984888888888882765062' (error){console.log(error);}})()();
const tiktokscraper = require('tiktok-scraper'); const user = tiktokscraper.userevent(“ tiktok”,{number:30}); user.on.on('data => json => {// json in JSON格式}中的data in JSON格式}) ; user.on.on('done',()=> {//completed}:; users.on('error',error => {//错误消息}); users.scrape(); const hashtag = tiktokscraper。 hashtagevent(“夏季”,{编号:250,代理:'socks5://1.1.1.1:90'}); hashtag.on('data',json => json => {// in JSON格式}中的data in JSON格式}); ashtag; ashtag。 on('done'',()=> {//completed}::hashtag.on('error',error => {//错误消息}); hashtag.scrape();
不需要
非常常见的问题是Tiktok何时将您的IP/代理列入黑名单,在这种情况下,您可以尝试设置会话,并且会有更高的成功机会
获取会话:
在任何浏览器中打开https://www.tiktok.com/
登录到您的帐户
右键单击 - >检查器 - >网络
刷新页面 - >选择对tiktok的任何请求 - >转到请求标题部分 - > cookies
在cookie sid_tt值中查找。通常看起来像: SID_TT = 521KKADKASDASKDJ4J213J12J312;
SID_TT = 521KKADKASDASKDJ4J213J12J312; - 这将是您经过身份验证的会话cookie值,应用于刮擦用户/主题标签/音乐/趋势feed
设置会话:
CLI :
示例content/var/bob/sessionlist.txt:
使用选项-会议设置单个会话。例如-SID_TT = 521KKADKASDASKDJ4J213J12J312;
通过使用选项- session-file将路径设置为文件列表。例如-session-file/var/bob/sessionlist.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
在模块中,您可以通过设置选项值Sessionlist来设置会话。例如sessionlist:[“ sid_tt = 521KKADKASDASKDJ4J213J12J312;”,“ SID_TT = 12312312312312;”]
该部分与模块使用情况有关(不是CLI)
{vivetourl}值载于可以包含任何值的cookie value {tt_webid_v2}
当您从用户,主题标签,音乐,趋势供稿或单个视频中提取视频时,除了视频元数据之外,您还将收到包含用于提取数据的参数的标题对象。这是重要的部分,为了通过{fiverourl} value访问/下载视频,您需要使用相同的{headers}值。
标题:{“ user-agent”:“ Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_5)AppleWebkit/537.36(Khtml,例如Gecko)Chrome/86.0.4240.80 Saferi www.tiktok.com/",“cookie“:” tt_webid_v2 = 68985414108686123“},
您可以使用{options}传递自己的标头。
const headers = {“ user-agent”:“ bob”,“ referer”:“ https://www.tiktok.com/",“,”,“,”,“,”,“,”,“,”,“,”,“,qubid_v2 = bob”} getVideometa('web_video_url' )用户('web_video_url',{headers})ashtag('web_video_url',{headers})趋势('web_video_url',{headers})music('web_video_url' {fiverourl}通过使用相同的自定义标头的值
方法的示例输出:用户,主题标签,趋势,音乐,userevent,hashtagevent,musicevent,趋势
{标题:{'user-agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_5)AppleWebKit/537.36(Khtml,例如Gecko)Chrome/86.0.0.4240.80 SafeRi/537.36',CROFERER:'HTTPS:'HTTPS://////https: 。 '用户名',以下:195,粉丝:43500,心脏:'1093998',视频:3,digg:95,验证:false,私人:私人:false,signature:'用户bio',avatar:'avatar_url'} {musicId: '6808098113188120838',musicName: 'blah blah',musicAuthor: 'blah',musicOriginal: true,playUrl: 'SOUND/MUSIC_URL',},covers:{default: 'COVER_URL',origin: 'COVER_URL',dynamic : 'COVER_URL'},imageUrl:'IMAGE_URL',videoUrl:'VIDEO_URL',videoUrlNoWaterMark:'VIDEO_URL_WITHOUT_THE_WATERMARK',videoMeta: { width: 480, height: 864, ratio: 14, duration: 14 },diggCount: 2104,shareCount: 1,PlayCount:9007,评论:50,提及:['@bob','@sam','@bob_again','@and_sam_again'],哈塔格斯:[{id:'69573911'标题:'hashtag_title',封面:[array]} ...],下载:true} ...],// if {filetype} and {download} options enbabled然后是enbabled,然后是:zip:zip:'/{current_path}/user_1555296635810944 。
{secUid: 'MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM',userId: '107955',isSecret: false,uniqueId: 'tiktok',nickName: 'TikTok',signature: 'Make Your Day',covers: ['COVER_URL'],coversMedium: ['COVER_URL '],以下:490,粉丝:38040567,心脏:'211522962',视频:93,验证:true,digg:29,}
{挑战:'4231',挑战名称:'love',文字:'',封面:[],coversmedium:[],帖子:66904972,视图:'194557706433',iscommerce,iscommerce
{标题:{'user-agent':'Mozilla/5.0(Macintosh; Intel Mac OS X 10_15_5)AppleWebKit/537.36(Khtml,例如Gecko)Chrome/86.0.0.4240.80 SafeRi/537.36',CROFERER:'HTTPS:'HTTPS://////https: 。 1584992742',equarmeta:{id:'6812221792183403526',名称:'blah'},musicmeta:{musicid:'682222222276137213677' Video_url',Videourlnowatermark:'video_url_without_the_watermark',videmeta:{width:480,高度:864,比率:14,持续时间:14},covers:{default:'coverd_url',oink oink oincom:'covely:'coverd_url'},digggcount,digggcount:digggcount:492292,Sharecect:492292, :339,PlayCount:614678,评论:4023,下载:false,hashtags:[],}]}
{音乐:{id:'688292279036066566',标题:'doja x calabria',playurl:'dfdfdfdf',coverthumb:'dfdfdf',dfdfdf',covermedium:coverdmedium:coverymedium:' true,playtoken:'ffdfdf',keytoken:'dfdfdfd',auidiourlwithcookie:false,私人:私人:false,distation:46,专辑:'',},作者:{id:'683350040409416666021' 'bryce',avatarthumb:'dfdfd',avatarmedium:'dfdfdf',avatarlarger:'dfdfdf',签名:'hi illy:)n70k听起来很酷tbhn? Z5JZEXTO0OZOYBQIWWHW5TAG_IM25LKO94DM3K ',秘密:false,ftc:fals,关系:0,OpenFavorite:false,评论表:0,Duetsetting:0,dietsetting:0,of stitchsetting:0,privateAccount:false,},stats,stats:{videocount:{videocount:361700},sharemeta,sharemeta:{title:''''''''''' Bryceyouloser | ♬doja x calabria |在tiktok'上,desc:'361.0k视频 - 观看由♬doja x calabria创建的真棒短' +'视频,},},};
执照
麻省理工学院
免费软件