Grattez et téléchargez des informations utiles depuis Tiktok.
Ce n'est pas une prise en charge officielle de l'API et etc. Ce n'est qu'un grattoir qui utilise l'API Web TikTok pour gratter les médias et les méta-informations connexes.
Caractéristiques
Faire
Contribution
Installation
Usage
Méthodes
Options
Utiliser avec les promesses
Utiliser avec les événements
Comment obtenir / définir la valeur de session
Comment accéder / télécharger la vidéo
Exemple de sortie
Méthodes de flux vidéo
getUserProfileinfo
gethashtaginfo
getvideometa
getMusicinfo
Construire
Courir
Exemples terminaux
Gérer l'historique du téléchargement
Gratter et télécharger en lot
Exemple de fichier de sortie
En terminal
Docker
Module
En ce moment, il n'est pas possible de télécharger la vidéo sans le filigrane
Télécharger les métadonnées du post illimité de l'utilisateur, du hashtag, des tendances ou des pages de musique-id
Enregistrer les métadonnées de publication sur les fichiers JSON / CSV
Téléchargez les médias avec et sans le filigrane et économisez dans le fichier zip
Télécharger une seule vidéo sans filigrane de la CLI
Signe URL pour faire une demande personnalisée à l'API Tiktok
Extraire les métadonnées de l'utilisateur, du hashtag et des pages vidéo uniques
Enregistrez les progrès précédents et téléchargez uniquement de nouvelles vidéos qui n'étaient pas téléchargées auparavant . Cette fonctionnalité fonctionne uniquement à partir de la CLI et uniquement si le drapeau de téléchargement est activé.
Afficher et gérer l'historique des messages précédemment téléchargés dans la CLI
Échangez et téléchargez l'utilisateur, le hashtag, les flux musicaux et les vidéos uniques spécifiées dans le fichier en mode batch
CLI: Enregistrer les progrès pour éviter de télécharger les mêmes vidéos
Réécrivez tout en dactylographie
Améliorer le support de proxy
Ajouter des tests
Télécharger la vidéo sans le filigrane
Indiquez dans le fichier de sortie (CSV / JSON) si la vidéo a été téléchargée ou non
Construire et courir à partir de docker
CLI: gratter et télécharger en lot
CLI: chargez des proxys à partir d'un fichier
CLI: Zip facultatif
Renouveler l'API
Définir l'URL de WEBHOOK (CLI)
Ajouter une nouvelle méthode pour collecter des métadonnées musicales
Ajouter une pagination manuelle
Améliorer la documentation
Télécharger des fichiers audio
Interface Web
N'oubliez pas les tests
test de fil
construction de fils
Tiktok-Scraper nécessite que Node.js v10 + fonctionne.
Installer à partir de NPM
npm i -g tiktok-scraper
Installer à partir du fil
Yarn Global Ajouter Tiktok-Scraper
$ tiktok-scraper - help Utilisation: TikTok-Scraper <rand> [Options] Commandes: TIKTOK-SCRACLER User [ID] Scrapez les vidéos du nom d'utilisateur. Entrez uniquement le nom d'utilisateur Tiktok-Scraper Hashtag [ID] Scrapez les vidéos de Hashtag. Entrez le hashtag sans # Tiktok-Scraper Trend Scrap Post des tendances actuelles Tiktok-Scraper Music [ID] Strape Posts d'un numéro d'identification musicale Tiktok-Scraper Video [ID] Télécharger une vidéo unique sans filigrane Tiktok-Scraper History Voir l'historique de téléchargement précédent Tiktok-Scraper à partir de fichier [fichier] [Async] Scraper les utilisateurs, les hashtags, la musique, les vidéos mentionnées dans un fichier. 1 valeur par ligne Options: --Version Show Number Number [Boolean] - Session de session Session Valeur de cookie. Parfois, la session peut être utile lors du gratte des données de n'importe quelle méthode [par défaut: ""] --Tater le chemin défini au fichier avec la liste des sessions actives. Un Session par ligne! [défaut: ""] - Timeout Définir le délai d'attente entre les demandes. Le délai d'attente est en millisecondes: 1000 mls = 1 s [par défaut: 0] - Number, -n Nombre de messages à gratter. Si vous définissez 0 alors tout Les messages seront grattés [par défaut: 0] --Sice Stratage Aucun article publié avant cette date (horodatage). Si défini sur 0, le filtre est désactivé [par défaut: 0] --Proxy, -p Set Single Proxy [par défaut: ""] --Proxy-fichier Utiliser les proxys d'un fichier. Scrapper utilisera des proxys aléatoires du fichier par chaque demande. 1 ligne 1 proxy. [défaut: ""] --download, -d Télécharger les articles vidéo dans le dossier avec l'entrée du nom [id] [boolean] [par défaut: false] - AsyncDownload, -a nombre de téléchargements simultanés [par défaut: 5] - HD Télécharger la vidéo dans HD. La taille de la vidéo sera x5-x 10 fois plus grande et cela affectera la vitesse d'exécution du grattoir. Ce L'option ne fonctionne qu'en combinaison avec le drapeau -w [boolean] [par défaut: false] --zip, -z zip tous les articles vidéo téléchargés [boolean] [par défaut: false] - Filepath File Chemin de fichier pour enregistrer tous les fichiers de sortie. [par défaut: "/users/karl.wint/documents/projects/javascript/tiktok-sccraper"] --FileType, -T Type du fichier de sortie où les informations de publication seront sauvé. 'All' - Enregistrer des informations sur tous Nom de fichier personnalisé pour les fichiers de sortie [par défaut: ""] --Nowatermark, -w Télécharger la vidéo sans filigrane. Remarque: Avec la mise à jour récente, vous n'avez besoin d'utiliser cette option que si vous grattez le flux de hashtag. Les flux utilisateur / tendance / musique auront cette URL par défaut [booléen] [par défaut: false] --store, -s Scraper enregistrera les progrès dans le dossier OS TMP ou personnalisé et dans le futur utilisation ne téléchargera que de nouvelles vidéos évitant les doublons [boolean] [par défaut: false] - historypath se définir le chemin personnalisé où les fichiers / fichiers historiques seront stockés [par défaut: "/ var / dossiers / d5 / fyh1_f2926q7c65g7skc0qh80000gn / t"] --remets, -r supprimer le record d'historique en saisissant "Type: entrée" ou "tout" pour nettoyer toute l'histoire. Par exemple: utilisateur: bob [par défaut: ""] - webhookUrl Set WebHook URL Pour recevoir le résultat du grattoir sous forme de demandes HTTP. Par exemple, à votre propre API [par défaut: ""] - Method Recevez des données à votre URL WebHook en tant que publication ou demandez [choix: "Get", "Post"] [par défaut: "Post"] - help Show Aide [ booléen] Exemples: TikTok-Scraper User Name-Name -D -N 100 --Session Sid_TT = DAE32131231 TIKTOK-SCRACLER TREND -D -N 100 - session Sid_TT = DAE32131231 TIKTOK-SCRACER HASHTAG HASHTAG_NAME -D -N 100 - sasion Sid_Tt = DAE32131231 TIKTOK-SCRACLER MUSIC_ID -D -N 50 - sasion sid_tt = dae32131231 tiktok-scraper video https://www.tiktok.com/@tiktok/video/680749198482765062 -D Tiktok-Scraper Tiktok-Scrather -Re : Bob Tiktok-Scraper Histor
Exemples terminaux
Gérer l'historique du téléchargement
Gratter et télécharger en lot
En utilisant Docker, vous ne pourrez pas utiliser - Filepath et - HistoryPath, mais vous pouvez définir le volume ( chemin d'hôte où tous les fichiers seront enregistrés ) en utilisant -v
docker build. -t tiktok-scraper
Exemple 1: Tous les fichiers, y compris le fichier d'historique, seront enregistrés dans le répertoire ($ PWD) où vous exécutez le docker à partir de
docker run -v $ (pwd): / usr / app / fichiers tiktok-scraper utilisateur tiktok -d -n 5 -s
Exemple 2: Tous les fichiers, y compris l'historique, seront enregistrés dans / utilisateur / bla / téléchargements
docker run -v / user / blah / downloads: / usr / app / fichiers tiktok-scraper utilisateur tiktok -d -n 5 -s
.User (id, options) // gratter les publications d'un utilisateur spécifique (promesse) .hashtag (id, options) // gratter les publications de la section hashtag (promesse) .Trend ('', Options) // Strape Posts à partir d'une tendance Section (promesse) .Music (id, options) // gratter les publications de Music Id (Promise) .UseRevent (ID, Options) // StrAcle Posts à un utilisateur spécifique (événement) .hashTagevent (ID, Options) // StrAcle Posts à partir de la section hashtag (événement) .TrendEvent ('', Options) // Strape Posts à partir d'une section Trends (événement) .Musicevent (ID, Options) // Strecing Posts by Music Id (Event) .GetUserProfileInfo ('Username', Options Options ) // obtenir des informations de profil utilisateur.gethashtaginfo ('hashtag', options) // obtenez des informations hashtag.SignUrl ('url', options) // obtenez la signature pour la request.getVideometa ('web_video_url', les options) // obtenez une vidéo Meta Info, y compris URL vidéo sans watermark.getMusicinfo ('https://www.tiktok.com/music/original-sound-6801885499343571718', options) // Obtenez des métadonnées musicales
const Options = {// Nombre de messages à gratter: {int default: 20} Numéro: 50, // Salcule Posts publié depuis cette date: {int default: 0} depuis: 0, // set session: {String [] Par défaut: ['']} // La valeur de cookie de session authentifiée est nécessaire pour gratter l'utilisateur / tendance / musique / hashtag feed // Vous pouvez mettre ici n'importe quel nombre de sessions, chaque demande sélectionnera la session aléatoire dans la liste de lisse: ['sid_tt = 21312213 '], // set proxy {String [] | String Default: ''} // proxy http: 127.0.0.1:8080// SOCKS Proxy: Socks5: //127.0.0.1: 8080 // Vous pouvez passer des proxies en tant que tableau et gratte sélectionnera au hasard un proxy dans le tableau vers le tableau à Exécutez le requestproxy: '', // défini sur {true} pour rechercher par ID utilisateur: {booléen default: false} by_user_id: false, // Combien de publication doit être téléchargée de manière asynchrone. Seulement si {téléchargement: true}: {int default: 5} asyncdownload: 5, // Combien de publication doit être grattée de manière asynchrone: {int default: 3} // L'option actuelle sera appliquée uniquement avec les types actuels: musique et hashtag / / Avec d'autres types, il est toujours 1 car chaque réponse de demande à l'API TikTok fournit la valeur "maxcursor" // qui est nécessaire pour envoyer la prochaine requête ANSYNCSCRAPING: 3, // Chemin de fichier où tous les fichiers seront enregistrés: {String Default : 'Current_dir'} filepath: `current_dir`, // nom de fichier personnalisé pour les fichiers de sortie: {chaîne par défaut: ''} nom de fichier:` current_dir`, // la sortie avec des informations peut être enregistrée sur un fichier CSV ou JSON: {{ String par défaut: 'na'} // 'csv' pour enregistrer dans CSV // 'JSON' pour enregistrer dans JSON // 'All' pour enregistrer dans JSON et CSV // 'na' pour sauter cette étapétype: `Na`, // Définissez des en-têtes personnalisés: utilisateur-agent, cookie et etc. Remarque: Lorsque vous analysez les métadonnées vidéo ou les métadonnées vidéo uniques, vous recevrez {Headers} objet // qui a été utilisé pour extraire les informations et pour accéder et télécharger la vidéo via la valeur {videourl} reçue que vous devez utiliser les mêmes en-têtes: {'user-agent': "bla", référer: 'https://www.tiktok.com/',cookie: `tt_webid_v2 = 68dsds`, }, // Télécharger la vidéo sans le filigrane: {booléen par défaut: false} // défini sur TRUE à télécharger sans le watermark // cette option affectera l'exécution SpeedNowAtmark: false, // Créer un lien vers la vidéo HD: {Boolean Default: FAUX} // Cette option ne fonctionnera que si {NowaterMark} est défini sur {true} hdvideo: false, // VerifyFp est utilisé pour vérifier la demande et éviter CAPTCHA // lorsque vous utilisez le proxy, il y a des chances élevées que la demande sera // bloqué avec capcha // Vous pouvez définir votre propre valeur VerifyFP ou par défaut (codé en dur) sera utilisé VerifyFP: '', // Communiquez l'hôte principal à TikTok Test enoint.// Lorsque vos demandes sont bloquées par CAPTCHA, vous pouvez essayer pour utiliser TikTok Test Endpoints.UseTestendpoints: false};
N'oubliez pas de vérifier le dossier Exemples
const tiktokscraper = require ('tiktok-scraper'); // flux d'utilisateur par username (async () => {try {const {const {const {const {const {const {const {const {const {const {const {const {const {const {const {const {const {Number: 100, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475; ']}); console.log (poteaux);} catch (error) {console.log (erreur);}}) (); // le flux d'utilisateur par l'utilisateur ID // certains id utilisateur tiktok sont plus grands alors max_safe_integer , vous devez transmettre l'ID utilisateur en tant que chaîne (async () => {try {const {const les poteaux = attendre tiktokscraper.user (`user_id`, {nombre: 100, by_user_id: true, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475;];] }); console.log (poteaux);} catch (error) {console.log (error);}}) (); // Feed de tendance (async () => {try {const {const {const {const {const {const {const {computs = attend tiktokscraper.trend ( '', {nombre: 100, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475;']}); console.log (poteaux);} catch (error) {console.log (error);}}) (); // hashtag feed (async () => {try {const {const {const {const {const = attend tiktokscraper.hashtag ('hashtag', {nombre: 100, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475;']}); error) {console.log(error);}})();// Get single user profile information: Number of followers and etc// input - USERNAME// options - not required(async () => {try {const user = attendre tiktokscraper.getUserProfileInfo ('username', options); console.log (utilisateur);} catch (error) {console.log (erreur);}}) (); // obtenir des informations de hashtag unique: nombre de vues et etc // Input - Hashtag Name // Options - non obligatoire (async () => {try {const hashtag = attendre tiktokscraper.gethashtaginfo ('hashtag', options); console.log (hashtag);} catch (erreur) {console.log (erreur);}}) (); // Obtenez des métadata vidéo unique // entrée - web_video_url // par exemple: https://www.tiktok.com/@tiktok/video/6807491984882765062// Options - non obligé (async () => {try {const videometa = attendre tiktokscraper.getvideometa ('https://www.tiktok.com/@tiktok/video/6807491984882765062', options); console.log (videoMeta);} capture. (erreur) {console.log (erreur);}}) ();
const tiktokscraper = require ('tiktok-scraper'); const users = tiktokscraper.userevent ("tiktok", {nombre: 30}); users.on ('data', json => {// data in json format})) ; users.on ('Done', () => {//complèted });users.on('error ', error => {// Message d'erreur}); users.scrape (); const hashtag = tiktokscraper. Hashtagevent ("Summer", {numéro: 250, proxy: 'socks5: //1.1.1.1: 90'}); hashtag.on ('data', json => {// data in json format}); hashtag. on ('Done', () => {//complèted });hashtag.on('error ', error => {// Message d'erreur}); hashtag.scrape ();
Pas requis
Un problème très courant est quand Tiktok est en liste noire votre IP / proxy et dans un tel cas, vous pouvez essayer de définir la session et il y aura des chances de succès plus élevées
Obtenez la session:
Ouvrir https://www.tiktok.com/ dans n'importe quel navigateur
Connectez-vous à votre compte
Cliquez avec le bouton droit -> Inspecteur -> Réseautage
Page de rafraîchissement -> Sélectionnez toute demande qui a été faite au tiktok -> Accédez aux sections d'en-tête de demande -> Cookies
Trouver dans la valeur des cookies SID_TT . Cela ressemble généralement à cela: sid_tt = 521kkadkasdaskdj4j213j12j312;
sid_tt = 521kkadkasdaskdj4j213j12j312; - Ce sera votre valeur de cookie de session authentifiée qui devrait être utilisée pour gratter l'utilisateur / hashtag / musique / flux tendance
Définissez la session:
CLI :
Exemple de contenu /var/bob/sessionlist.txt:
Définissez une seule session en utilisant l'option - session . Par exemple - session sid_tt = 521kkadkasdaskdj4j213j12j312;
Définissez le chemin du fichier avec la liste des sessions en utilisant l'option - session-fichier . Par exemple - session-file /var/bob/sessionlist.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
Dans le module, vous pouvez définir la session en définissant la liste de session de valeur d'option. Par exemple SessionList: ["sid_tt = 521kkadkasdaskdj4j213j12j312;", "sid_tt = 12312312312312;"]
Cette partie est liée à l'utilisation du module (pas la CLI)
La valeur {videourl} est reproduite à la valeur du cookie {tt_webid_v2} qui peut contenir n'importe quelle valeur
Lorsque vous extrairez des vidéos de l'utilisateur, du hashtag, de la musique, du flux tendance ou de la vidéo unique, en réponse, en plus des métadonnées vidéo, vous recevrez un objet d'en-tête qui contiendra des paramètres utilisés pour extraire les données. Voici la partie importante, afin d'accéder / télécharger la vidéo via la valeur {Videourl} que vous devez utiliser les mêmes valeurs {en-têtes} .
En-têtes: {"User-Agent": "Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit / 537.36 (Khtml, comme Gecko) Chrome / 86.0.4240.80 Safari / 537.36", "Référer": "https: // www.tiktok.com/" ,"cookie ":" tt_webid_v2 = 689854141086886123 "},
Vous pouvez passer vos propres en-têtes avec les {options} .
const Headers = {"User-Agent": "Bob", "référer": "https://www.tiktok.com/" ,"cookie": "tt_webid_v2 = bob"} getVideometa ('web_video_url', {headers} ) user ('web_video_url', {en-têtes}) hashtag ('web_video_url', {headers}) Trend ('web_video_url', {headers}) music ('web_video_url', {headers}) // et après que vous puissiez accéder à la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via la vidéo via vous via la vidéo via la vidéo via la vidéo via votre vidéo via votre vidéo. {Videourl} Valeur en utilisant les mêmes en-têtes personnalisés
Exemple de sortie pour les méthodes: utilisateur, hashtag, tendance, musique, userevent, hashtagevent, musicevent, tendance
{Headers: {'User-Agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit / 537.36 (Khtml, comme Gecko) Chrome / 86.0.4240.80 Safari / 537.36', référente: 'https: // wwwww .tiktok.com / ', cookie:' tt_webid_v2 = 689854141086886123 '}, collectionneur: [{id:' video_id ', texte:' Légende ', CreateTime:' 1583870600 ', AuthorMeta: {id:' user ', name: 'Username', suivant: 195, fans: 43500, cœur: '1093998', vidéo: 3, Digg: 95, vérifié: false, privé: false, signature: 'User bio', avatar: 'avatar_url'}, musicmeta: {musid: '6808098113188120838', MusicName: 'Blah Blah', MusicAuthor: 'Blah', Musicoriginal: True, Playurl: 'Sound / Music_Url',}, couver: {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, durée: 14}, diggCount: 2104, shareCount: 14, Durée: 14}, DiggCount: 2104, ShareCount: 14 1, playcount: 9007, commentcount: 50, mentionne: ['@bob', '@sam', '@bob_again', '@and_sam_again'], hashtags: [{id: '69573911', name: 'playwithlife', Titre: 'hashtag_title', couverture: [array]} ...], téléchargé: true} ...], // if {FileType} et {download} Les options sont enbable alors: zip: '/ {current_path} / user_1552963581094 .zip ', json:' /{current_path }/user_1552963581094.json',csv: '/{current_path }/user_1552963581094.csv'}
{seuid: 'ms4wljabaaaav7isuuxdjgdvjkmh_vz1qkdzyo1apxgzaxdbseiupim', userId: '107955', issecret: false, uniqueid: 'Tiktok', surnom: 'tiktok', signature: 'Make Your Day' '], suivant: 490, fans: 38040567, cœur:' 211522962 ', vidéo: 93, vérifié: true, digg: 29,}
{ChallengeId: '4231', ChallenEName: 'Love', texte: '', Covers: [], CoverseMedium: [], Posts: 66904972, vues: '194557706433', Iscommerce: False, SplitTitle: ''}
{Headers: {'User-Agent': 'Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_15_5) Applewebkit / 537.36 (Khtml, comme Gecko) Chrome / 86.0.4240.80 Safari / 537.36', référente: 'https: // wwwww .tiktok.com / ', cookie:' tt_webid_v2 = 689854141086886123 '}, collectionneur: [{id:' 6807491984882765062 ', texte:' nous lancez la série #HappyAtHome live Stream Today at 5pm Pt! ', Creettime' '' 1584992742 ', AuthorMeta: {id:' 6812221792183403526 ', nom:' bla '}, musicmeta: {musidId:' 68222233276137213677 ', Musicname:' Blah ', Musiclor Video_url ', VideourlNowaterMark:' video_url_without_the_watermark ', videometa: {width: 480, hauteur: 864, ratio: 14, durée: 14}, couvertures: {par défaut:' couverture_url ', Origin:' couverture_url '}, DiggCount: 49292, ShareCount: Origin : 339, PlayCount: 614678, commentcount: 4023, téléchargé: false, hashtags: [],}]}
{Music: {id: '6882925279036066566', Titre: 'Doja x Calabria', Playurl: 'dfdfdfdf', Coverthumb: 'dfdfdf', couvre-covermedium: 'dfdfdf', COUVERLARGE: 'FDFDF', Authorname: 'BRYCE', ORIGINAL: 'FDFDF', Authorname: 'BRYCE', ORIGINAL: true, playToken: 'ffdfdf', keytoken: 'dfdfdfd', Audiourlwithcookie: false, privé: false, durée: 46, album: '',}, auteur: {id: '6835300004094166021', unique: 'MashupsbyBryce', nickname: nickname: 'Bryce', Avatarthumb: 'dfdfd', avatarmedium: 'dfdfdf', avatarlarger: 'dfdfdf', signature: 'hi ily :) n70k sonne cool? dz5jzexto0ozoybqiwwhw5tag_im25lko94dm3k ', secret: false, ftc: false, relation: 0, openfavorite: false, commentaires de commentaires: 0, duetsseting: 0, stitchseting: 0, privateAccount: false,}, statistiques: {videoCount: 361700}, shareMeta: {title:' Bryceyouloser | ♬ doja x Calabre | sur tiktok ', desc:' 361.0k vidéos - Regardez des vidéos géniales courtes '+' créées avec ♬ doja x Calabria ',},};
Licence
Mit
Logiciel gratuit