從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創建的真棒短' +'視頻,},},};
執照
麻省理工學院
免費軟件