Raspe e baixe informações úteis do Tiktok.
Este não é um suporte oficial da API e etc. Este é apenas um raspador que está usando a API da Web Tiktok para raspar a mídia e a meta -informação relacionada.
Características
Pendência
Contribuição
Instalação
Uso
Métodos
Opções
Use com promessas
Use com eventos
Como obter/definir o valor da sessão
Como acessar/baixar vídeo
Exemplo de saída
Métodos de feed de vídeo
getUserProfileInfo
Gethashtaginfo
getVideometa
getMusicInfo
Construir
Correr
Exemplos de terminais
Gerencie o histórico de download
Raspe e baixe em lote
Exemplo de arquivo de saída
No terminal
Docker
Módulo
A partir de agora, não é possível baixar vídeo sem a marca d'água
Faça o download dos metadados post ilimitados do usuário, hashtag, tendências ou páginas de ID musical
Salvar os metadados post nos arquivos JSON/CSV
Baixe a mídia com e sem a marca d'água e salve no arquivo zip
Baixe um único vídeo sem a marca d'água da CLI
Assine o URL para fazer uma solicitação personalizada para a API Tiktok
Extrair metadados do usuário, hashtag e páginas de vídeo únicas
Salve o progresso anterior e baixe apenas novos vídeos que não foram baixados antes . Esse recurso funciona apenas da CLI e somente se o sinalizador de download estiver ativado.
Veja e gerencie o histórico de postagens baixadas anteriormente na CLI
Raspe e baixe o usuário, hashtag, feeds musicais e vídeos únicos especificados no arquivo no modo de lote
CLI: Economize progresso para evitar baixar os mesmos vídeos
Reescrever tudo no TypeScript
Melhorar o suporte de proxy
Adicione testes
Baixe o vídeo sem a marca d'água
Indicar no arquivo de saída (CSV/JSON) se o vídeo foi baixado ou não
Construir e fugir do Docker
CLI: raspar e baixar em lote
CLI: Carregar proxies de um arquivo
CLI: ZIP opcional
Renovar API
Definir URL da Webhook (CLI)
Adicione um novo método para coletar metadados musicais
Adicione a paginação manual
Melhorar a documentação
Faça o download de arquivos de áudio
Interface da web
Não se esqueça dos testes
Teste de fio
construção de fios
Tiktok-scraper requer Node.js v10+ para ser executado.
Instale a partir do NPM
npm i -g tiktok -scraper
Instale a partir do fio
Yarn Global Add Tiktok-Scraper
$ TIKTOK-SCRAPER --HELP Uso: Tiktok-Scraper <command> [Opções] Comandos: Usuário do Tiktok-Scraper [ID] Recurso de vídeos do nome de usuário. Digite apenas o nome de usuário Hashtag Tiktok-Scraper [id] vídeos de raspagem da hashtag. Entre hashtag sem # TIKTOK-SCRAPER TREND POSTOS DE TREVENDES ATUAIS Música Tiktok-Scraper [ID] Publicações de raspagem de um número de identificação de música Vídeo Tiktok-Scraper [id] baixar um único vídeo sem a marca d'água História do Tiktok-Scraper Ver Histórico de Downloads anteriores TIKTOK-Scraper From-File [FILE] [ASYNC] Usuários de raspagem, hashtags, músicas, vídeos mencionaram um arquivo. 1 valor por 1 linha Opções: -Version Show Número da versão [booleano] -Session Set Sessão Valor do cookie. Às vezes a sessão pode ser útil ao raspar dados de qualquer método [padrão: ""] -Session-file Set Path para o arquivo com a lista de sessões ativas. Um Sessão por linha! [padrão: ""] -Timeout Definir o tempo limite entre as solicitações. O tempo limite está em milissegundos: 1000 mls = 1 s [padrão: 0] -Número, -n Número de postagens para raspar. Se você vai definir 0, então todos As postagens serão raspadas [Padrão: 0] -Desde um raspe nenhum posts publicados antes desta data (registro de data e hora). Se definido como 0, o filtro é desativado [padrão: 0] --proxy, -p Definir proxy único [padrão: ""] -Proxy-File usa proxies de um arquivo. Raspador usará proxies aleatórios do arquivo de acordo com cada solicitação. 1 Linha 1 proxy. [padrão: ""] -download, -d Baixar postagens de vídeo na pasta com a entrada de nome [ID] [Booleano] [Padrão: Falso] --asyncdownload, -a um número de downloads simultâneos [padrão: 5] -HD Download Vídeo em HD. O tamanho do vídeo será x5-x10 vezes maior e isso afetará a velocidade de execução do raspador. Esse A opção funciona apenas em combinação com -w sinalizador [booleano] [Padrão: false] --zip, -z zip todas as postagens de vídeo baixadas [boolean] [padrão: false] -Filepath File Path para salvar todos os arquivos de saída. [Padrão: "/users/karl.wint/documents/projects/javascript/tiktok-scraper"] --Filetype, -t Tipo do arquivo de saída em que as informações de postagem serão salvo. 'All' -Salve informações sobre todas as postagens nos 'json' e 'csv' [escolhas: "csv", "json", "all", ""] [padrão: ""] --Filename, -f set Nome do arquivo personalizado para os arquivos de saída [padrão: ""] - -hoje, -w baixe vídeo sem a marca d'água. Nota: Com a atualização recente, você só precisa usar esta opção se estiver raspando o feed de hashtag. Feeds de usuário/tendência/música terão esse URL por padrão [boolean] [padrão: false] -Store, -s Rasper salvará o progresso no sistema operacional ou pasta personalizada e, no uso futuro [boolean] [Padrão: false] -HistoryPath Defina o caminho personalizado em que o arquivo/arquivos histórico será armazenado [padrão: "/var/pastors/d5/fyh1_f2926q7c65g7skc0qh800gng/t"] - -romance, -r Excluir o registro da história por entração "Tipo: entrada" ou "all" para limpar toda a história. Por exemplo: Usuário: Bob [padrão: ""] -Webhookurl Definir URL do webhook para receber o resultado do raspador como solicitações HTTP. Por exemplo, para sua própria API [padrão: ""] -Método Receba dados no seu URL da webhook como postagem ou solicitação [escolhas: "Get", "Post"] [padrão: "post"] -Help Mostrar ajuda [ BOOLEANS] Exemplos: TIKTOK -CRAPER UserName de usuário -D -D 100 -Session sid_tt = DAE32131231 TIKTOK -SCRAPER TREND -D -N 100 -Session sid_tt = DAE32131231 Tiktok -scraper Hashtag HashT_Name -D DAE32131231 Música Tiktok -Scraper Music_Id -D -N 50 -Session sid_tt = dae32131231 TIKTOK -SCRAPER VÍDEO https://www.tiktok.com/@tiktok/video/680749198482766666655650ktok/video/6807491984827666666650 : Bob Tiktok-Scraper History -R All Tiktok-Scraper From-File Batch_File Async_Tasks -D
Exemplos de terminais
Gerencie o histórico de download
Raspe e baixe em lote
Ao usar o Docker, você não poderá usar -Filepath e - -HistoryPath, mas você pode definir volume ( caminho do host onde todos os arquivos serão salvos ) usando -v
Docker Build. -T Tiktok-Scraper
Exemplo 1: Todos os arquivos, incluindo o arquivo de histórico, serão salvos no diretório ($ PWD), onde você executa o Docker de
Docker Run -v $ (PWD):/usr/app/arquivos user tiktok -scraper Tiktok -d -n 5 -s
Exemplo 2: Todos os arquivos, incluindo o arquivo de histórico, serão salvos em/user/blá/downloads
Docker Run -V/User/Blah/Downloads:/usr/app/arquivos TIKTOK -Scraper User Tiktok -d -n 5 -s
.User (ID, Opções) // Raspe postagens de um usuário específico (promessa) .hashtag (id, opções) // Postagens de raspagem da seção de hashtag (promessa) .trend (', opções) // Publicações de uma tendências de uma tendências Seção (Promise) .Music (ID, Opções) // Raspe Postagens por Music ID (Promise) .Userevent (ID, Opções) // Robina postagens de um usuário específico (evento) .hashTagevent (ID, Opções) // Postagens de Scrape Na seção de hashtag (Evento) .Trendevent ('', Options) // Rasa postagens de uma seção de tendências (evento) .musicevent (id, opções) // Postagens de raspagem por Music ID (Event) .getUserProfileInfo ('Nome de usuário', Opções ) // Obtenha informações do perfil do usuário.gethashtaginfo ('hashtag', opções) // obtém hashtag Information.signurl ('url', options) // obtenha assinatura para o request.getVideomeMeta ('web_video_url', opções) // Get Video Meta informações, incluindo URL de vídeo sem o Watermark.getMusicInfo ('https://www.tiktok.com/music/original-sound-6801885499343571718', opções) // Get Music Metadata
const options = {// Número de postagens a serem raspadas: {int default: 20} Número: 50, // Postagens de raspagem publicadas desde esta data: {int padrão: 0} Desde: 0, // Set Session: {String [] Padrão: ['']} // O valor de cookie de sessão autenticado é necessário para raspar o usuário/tendência/música/hashtag feed // Você pode colocar aqui qualquer número de sessões, cada solicitação selecionará sessão aleatória na lista de listsionList: ['sid_tt = 21312213 '], // Definir proxy {string [] | String padrão: ''} // http proxy: 127.0.0.1:8080// Socks Proxy: Socks5: //127.0.0.1: 8080 // você pode passar por proxies como uma matriz e raspador selecionará aleatoriamente um proxy da matriz para a matriz para Execute o requestsProxy: '', // defina como {true} para pesquisar por ID do usuário: {Boolean padrão: false} by_user_id: false, // Quantas postagens devem ser baixadas de forma assíncrona. Somente se {download: true}: {int default: 5} assyncdownload: 5, // Quantas postagens devem ser raspadas de forma assíncrona: {int padrão: 3} // a opção atual será aplicada apenas com tipos atuais: música e hashtag/ / Com outros tipos, é sempre 1 porque toda resposta de solicitação à API do Tiktok está fornecendo o valor "maxcursor" // necessário para enviar o próximo requestAdasyncscraping: 3, // caminho do arquivo onde todos os arquivos serão salvos: {{string default default : 'Current_dir'} filepath: `current_dir`, // Nome do arquivo personalizado para os arquivos de saída: {string padrão: ''} nome do arquivo:` current_dir`, // saída com informações pode ser salva em um CSV ou JSON Files: { String padrão: 'Na'} // 'csv' para salvar em csv // 'json' para salvar em json // 'all' para salvar em json e csv // 'na' para pular este StepFileType: `na`, // Defina cabeçalhos personalizados: User-Agent, Cookie e etc // Nota: Quando você analisa o feed de vídeo ou metadados de vídeo único, em troca, você receberá {cabeçalhos} objeto // que foi usado para extrair as informações e para acessar e baixe o vídeo através do Valor Recebido {Videourl} Você precisa usar os mesmos HeaderHeaders: {'User-Agent': "BLAH", Referente: 'https://www.tiktok.com/'.cookie: `TT_WEBID_V2 = 68DSDS`, }, // Baixe o vídeo sem a marca d'água: {padrão booleano: false} // Defina como true como download sem a marca d'água // Esta opção afetará a velocidade de execução SpeedNowaterMark: false, // Criar link para o vídeo HD: {Boolean Padrão: false} // Esta opção só funcionará se {NowaterMark} estiver definido como {true} hdvideo: false, // verifyfp for usado para verificar a solicitação e evitar captcha // quando você estiver usando proxy, há altas chances de que a solicitação será // bloqueado com Captcha // Você pode definir seu próprio valor verificadofp ou padrão (codificado) será usadoVififyFp: '', // alternar o host principal para o Tiktok Test Enpoint.// Quando suas solicitações forem bloqueadas pelo Captcha, você pode tentar Para usar os terminais do teste tiktok.usetestendpoints: false};
Não se esqueça de verificar a pasta Exemplos
const tiktokscraper = requer ('tiktok-scraper'); // feed de usuário por nome de usuário (async () => {try {const posts = wait tiktokscraper.user ('nome de usuário', {número: 100, sessionlist: ['sid_tt = 58BA9E34431774703D3C34E60D584475; ']}); console.log (Posts);} catch (error) {console.log (erro);}}}) (); // feed do usuário de usuário // Alguns tiktok user id são maiores , você precisa passar o ID do usuário como uma string (async () => {try {const posts = aguarda tiktokscraper.user (`user_id`, {número: 100, by_user_id: true, sessionList: ['sid_tt = 58Ba9E3431777703334e60d = 58Ba9E343177770333333 }); console.log (posts);} catch (error) {console.log (error);}}) (); // feed de tendência (async () => {try {const posts = wait tiktokscraper.trend ( '', {Número: 100, SessionList: ['sid_tt = 58ba9e34431774703d3c34e60d584475;']}); console.log (posts);} catch (error) {console.log (erro);}}) (); feed (async () => {tente {const posts = aguarda tiktokscraper.hashtag ('hashtag', {número: 100, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d58447; error) {console.log (erro);}}) (); // obtenha informações de perfil de usuário único: número de seguidores e etc // input - nome de usuário // opções - não é necessário (async () => {tente {const {const {const {const Usuário = Aguarda tiktokscraper.getUserProfileInfo ('Nome de usuário', Opções); console.log (usuário);} catch (error) {console.log (erro);}}) (); // Obtenha informações únicas de hashtag: Número de visualizações e etc // Entrada - Nome da hashtag // Opções - não é necessário (async () => {tente {const hashtag = aguarda tiktokscraper.gethashtaginfo ('hashtag', opções); {Console.log (erro);}}) (); // Obtenha metadados de vídeo único // input - web_video_url // por exemplo: https://www.tiktok.com/@tiktok/video/68074919848276555062///video/680749198482765062// Options- Não é necessário (async () => {tente {const videometa = aguardar tiktokscraper.getvideometa ('https://www.tiktok.com/@tiktok/Video/680749198482765062', opções); console.og (videogameseet (videounomeet (videouneet (videouneet (videouneet (video -40749198482765062); (erro) {console.log (erro);}}) ();
const tiktokscraper = requer ('tiktok-scraper'); const users = tiktokscraper.userevent ("tiktok", {número: 30}); usuários.on ('dados', json => {// dados no formato json}) ; users.on ('done', () => {//completed }) ;users.on('error ', error => {// mensagem de erro}); users.scrape (); const hashtag = tiktokscraper. hashtagevent ("verão", {número: 250, proxy: 'socks5: //1.1.1.1: 90'}); hashtag.on ('dados', json => {// dados no formato json}); hashtag. on ('done', () => {//completed}) ;hashtag.on('error ', erro => {// mensagem de erro}); hashtag.scrape ();
Não é necessário
Problema muito comum é quando o Tiktok está na lista negra do seu IP/proxy e, nesse caso, você pode tentar definir sessão e haverá maiores chances de sucesso
Obtenha a sessão:
Abra https://www.tiktok.com/ em qualquer navegador
Faça login na sua conta
Clique com o botão direito do mouse -> Inspetor -> Rede
Página de atualização -> Selecione qualquer solicitação feita ao Tiktok -> Vá para as seções do cabeçalho da solicitação -> Cookies
Encontre nos cookies sid_tt valor. Geralmente parece assim: sid_tt = 521kkadkasdaskdj4j213J12J312;
sid_tt = 521KKAdkasDaskdj4J213J12J312; - Este será o seu valor de cookie de sessão autenticado que deve ser usado para raspar o usuário/hashtag/music/feed de tendências
Defina a sessão:
CLI :
Exemplo de conteúdo /var/bob/sessionlist.txt:
Defina uma única sessão usando a opção - -sessão . Por exemplo -Session sid_tt = 521kkadkasdaskdj4j213J12J312;
Defina o caminho para o arquivo com a lista de sessões usando a opção -Session-File . Por exemplo -Session-File /Var/Bob/SessionList.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
No módulo, você pode definir sessão definindo a opção Value SessionList. Por exemplo , sessionlist: ["SID_TT = 521KKADKASDASKDJ4J213J12J312;", "SID_TT = 12312312312312;"]
Esta parte está relacionada ao uso do módulo (não da CLI)
O valor {videourl} é bi -primo para o valor do cookie {tt_webid_v2} que pode conter qualquer valor
Quando você extrai vídeos do usuário, hashtag, música, feed de tendência ou vídeo único, em resposta, além dos metadados de vídeo, você receberá um objeto Headers que conterá parâmetros que foram usados para extrair os dados. Aqui está a parte importante, a fim de acessar/baixar vídeo através do valor {videourl}, você precisa usar os mesmos valores {cabeçalhos} .
Cabeçalhos: {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit/537.36 (Khtml, como Gecko) Chrome/86.0.4240.80 Safari/537.36", "Referenciador": www.tiktok.com/","cookie ":" tt_webid_v2 = 689854141086886123 "},
Você pode passar seus próprios cabeçalhos com o {options} .
Cabeçalhos const = {"user-agent": "bob", "referente": "https://www.tiktok.com/","cookie": "tt_webid_v2 = bob"} getVideometa ('web_video_url', {headers} ) user ('web_video_url', {headers}) hashtag ('web_video_url', {headers}) tend ('web_video_url', {headers}) music ('web_video_url', {headers}) // e depois de acessar o vídeo através {videourl} valor usando os mesmos cabeçalhos personalizados
Exemplo de saída para os métodos: usuário, hashtag, tendência, música, userevent, hashtagevent, musicevent, terendevent
{Cabeçalhos: {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit/537.36 (Khtml, como Gecko) Chrome/86.0.4240.80 Safari/537.36', Referenciador: 'HT:' HT: 'HT: HT: HT: .tiktok.com/',cookie: 'tt_webid_v2=689854141086886123'},collector:[{id: 'VIDEO_ID',text: 'CAPTION',createTime: '1583870600',authorMeta:{id: 'USER ID',name: 'Nome de usuário', seguindo: 195, fãs: 43500, coração: '1093998', vídeo: 3, digg: 95, verificado: falso, privado: false, assinatura: 'user bio', avatar: 'avatar_url'}, musicmeta: {MusicId: '6808098113188120838', MusicName: 'BLAH BLAH', MusicaThor: 'BLAH', Musicoriginal: True, Playurl: 'Sound/Music_url',}, Covers: {default: 'Cover_url', Origin: 'Coverl',}, dinâmica, : 'Cover_url'}, imageurl: 'image_url', videourl: 'video_url', videourlnowatermark: 'video_url_without_the_watermark', videometa: {largura: 480, altura: 864, ratio: 14, duração: 14}, diggcount: 210, 210, 864, ratio: 14, duração: 14}, diggcount: 210, 210, 864, ratio: 14, duração: 14}, diggcount: 210, 210, 864, ratio: 14, duração: 14}, diggcount: 210, 210, 864, ratio: 14, duração: 14}, diggcount: 210, 210, 864, ratio: 14, duração: 14}. 1, PlayCount: 9007, comentário: 50, menciona: ['@bob', '@sam', '@bob_again', '@and_sam_again'], hashtags: [{id: '69573911', nome: 'playwithlife', Título: 'hashtag_title', capa: [Array]} ...], baixado: true} ...], // se {filetype} e {download} opções são enbatadas então: zip: '/{current_path}/user_1552963581094 .zip ', json:'/{current_path }/user_1552963581094.json'.csv: '/{current_path }/user_1552963581094.csv'}
{secUid: 'MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM',userId: '107955',isSecret: false,uniqueId: 'tiktok',nickName: 'TikTok',signature: 'Make Your Day',covers: ['COVER_URL'],coversMedium: ['COVER_URL '], seguindo: 490, fãs: 38040567, coração:' 211522962 ', vídeo: 93, verificado: true, digg: 29,}
{desafio: '4231', desafio: 'amor', texto: '', capas: [], coversmedium: [], postagens: 66904972, visualizações: '194557706433', isCommerce: false, splittitle: ''}
{Cabeçalhos: {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit/537.36 (Khtml, como Gecko) Chrome/86.0.4240.80 Safari/537.36', Referenciador: 'HT:' HT: 'HT: HT: HT: .tiktok.com/', cookie:' tt_webid_v2 = 689854141086886123 '}, colecionador: [{id:' 6807491984882765062 ', texto:' Somos iniciando a série #Happyathome LIVE 1584992742 ', AuthorMeta: {id:' 6812221792183403526 ', nome:' BLAH '}, MusicMeta: {Musicid:' 682222327613721367 '', '»» »:' Blah ', Musicauthor: MusicAthor: MusicAl: MusicAthor: MusicAl: MusicAhr: MusicAl: MusicAl: MusicAhor: Video_url ', videourlnowaterMark:' video_url_without_the_watermark ', videometa: {width: 480, altura: 864, razão: 14, duração: 14}, covers: {padrão:' Cover_url ', origem:' Cover_url '}, Digcount: 49222222222222220: {{default:' Cover_url ', origem:' Cover_url '}, Digcount: 492922220:' : 339, PlayCount: 614678, CommentCount: 4023, baixado: false, hashtags: [],}]}
{music: {id: '6882925279036066566',title: 'doja x calabria',playUrl: 'dfdfdfdf',coverThumb:'dfdfdf',coverMedium:'dfdfdf',coverLarge:'fdfdf',authorName: 'bryce',original: true,playToken:'ffdfdf',keyToken: 'dfdfdfd',audioURLWithcookie: false,private: false,duration: 46,album: '',},author: {id: '6835300004094166021',uniqueId: 'mashupsbybryce',nickname: 'Bryce', Avatarthumb: 'dfdfd', Avatarmedium: 'dfdfdf', avatarlarger: 'dfdfdf', assinatura: 'hi ily :) n70k parece legal tbhn? Z5JZEXTO0OZOYBQIWWHW5TAG_IM25LKO94DM3K ', Segredo: Falso, FTC: FALSO, RELAÇÃO: 0, OpenFavorite: False, Comentáriostting: 0, DuetSetting: 0, StitchSetting: 0, PrivateAcCount: false,}, estatísticas: {Videocount: 361700}, sharemeta: {title:' Bryceyouloser | ♬ Doja X Calabria | em Tiktok ', Desc:' 361.0k Vídeos - Assista a vídeos impressionantes de ' +' criados com 'doja x calabria',},};
Licença
Mit
Software livre