Raspe y descargue información útil de Tiktok.
Este no es un soporte oficial de API, etc., es solo un raspador que está utilizando la API web de Tiktok para raspar los medios y la meta información relacionada.
Características
Hacer
Contribución
Instalación
Uso
Métodos
Opción
Usar con promesas
Usar con eventos
Cómo obtener/establecer el valor de la sesión
Cómo acceder/descargar video
Ejemplo de salida
Métodos de alimentación de video
getUserProfileInfo
gethashtaginfo
getVidometa
getMusicinfo
Construir
Correr
Ejemplos terminales
Administrar el historial de descargas
Raspar y descargar en lotes
Ejemplo de archivo de salida
En terminal
Estibador
Módulo
A partir de ahora no es posible descargar video sin la marca de agua
Descargue metadatos de publicación ilimitados de las páginas de usuario, hashtag, tendencias o idiota
Guardar metadatos de publicación en los archivos JSON/CSV
Descargue los medios con y sin la marca de agua y guarde en el archivo zip
Descargue un solo video sin la marca de agua de la CLI
Firme URL para hacer una solicitud personalizada a la API Tiktok
Extraer metadatos de las páginas de usuario, hashtag y videos individuales
Guarde el progreso anterior y descargue solo nuevos videos que no se descargaran antes . Esta característica solo funciona desde la CLI y solo si la bandera de descarga está encendida.
Ver y administrar el historial de publicaciones anteriormente descargadas en la CLI
Risote y descargar usuarios, hashtag, alimentos musicales y videos individuales especificados en el archivo en modo lotes
CLI: Guardar progreso para evitar descargar los mismos videos
Reescribir todo en TypeScript
Mejorar el soporte proxy
Agregar pruebas
Descargar video sin la marca de agua
Indique en el archivo de salida (CSV/JSON) si el video se descargó o no
Construir y correr desde Docker
CLI: raspado y descarga en lotes
CLI: cargar proxies desde un archivo
CLI: zip opcional
Renovar API
Establecer URL de Webhook (CLI)
Agregar nuevo método para recopilar metadatos musicales
Agregar paginación manual
Mejorar la documentación
Descargar archivos de audio
Interfaz web
No te olvides de las pruebas
prueba de hilo
construcción de hilos
TikTok-scraper requiere Node.js V10+ para ejecutar.
Instalar desde NPM
npm i -g tiktok -scraper
Instalar desde hilo
Yarn Global Agregar tiktok-scraper
$ Tiktok-scraper --help Uso: Tiktok-scraper <Command> [Opciones] Comandos: Tiktok-scraper user [id] raspando videos desde el nombre de usuario. Ingrese solo el nombre de usuario Tiktok-scraper hashtag [id] raspando videos de hashtag. Ingrese hashtag sin # Tiktok-scraper tendencia raspada de las tendencias actuales Tiktok-scraper Music [ID] raspan publicaciones de un número de identificación de música Tiktok-scraper video [id] Descargar video único sin la marca de agua Tiktok-scraper History View Historia de descarga anterior Tiktok-scraper from-file [archivo] [async] usuarios de raspado, hashtags, música, videos mencionados en un archivo. 1 valor por 1 línea Opciones: -Número de versión del show version [boolean] --session Set Session Cookie Value. A veces la sesión puede ser útil al raspar datos de cualquier método [predeterminado: ""] --session-File establece la ruta al archivo con la lista de sesiones activas. Uno Sesión por línea! [por defecto: ""] -Tiempo de tiempo establece el tiempo de espera entre las solicitudes. El tiempo de espera está en milisegundos: 1000 mls = 1 s [predeterminado: 0] --number, -n número de publicaciones para raspar. Si se establece 0, entonces todo Las publicaciones serán raspadas [predeterminado: 0] --Since Scope No Publicaciones publicadas antes de esta fecha (marca de tiempo). Si se establece en 0, el filtro está desactivado [predeterminado: 0] --proxy, -p establecer un solo proxy [predeterminado: ""] --proxy-file use proxies de un archivo. Scraper usará proxies aleatorios desde el archivo por cada solicitud. 1 línea 1 proxy. [por defecto: ""] -Englove, -d descargar publicaciones de video en la carpeta con la entrada de nombre [id] [boolean] [predeterminado: falso] --asynCdownload, -Un número de descargas concurrentes [predeterminado: 5] -HD Descargar video en HD. El tamaño del video será x5-x10 veces mayor y esto afectará la velocidad de ejecución del raspador. Este La opción solo funciona en combinación con la bandera -W [booleano] [predeterminado: falso] --zip, -z zip todas las publicaciones de video descargadas [boolean] [predeterminado: falso] -ruta de archivo-filepath para guardar todos los archivos de salida. [predeterminado: "/users/karl.wint/documents/projects/javascript/tiktok-scraper"] --filetype, -t tipo del archivo de salida donde estará la información posterior guardado. 'All': guarde información sobre todas las publicaciones en el '' JSON 'y' CSV '[Choices: "CSV", "Json", "All", ""] [predeterminado: ""] - -filename, -f set Nombre de archivo personalizado para los archivos de salida [predeterminado: ""] - -Nowatermark, -W Descargar video sin la marca de agua. Nota: Con la actualización reciente, solo necesita usar esta opción si está raspando la alimentación de hashtag. El usuario/tendencia/alimentos musicales tendrá esta URL de forma predeterminada [boolean] [predeterminado: falso] --s -store, -s scraper guardará el progreso en la carpeta OS TMP o personalizado y en el futuro uso solo descargará nuevos videos evitando duplicar [boolean] [predeterminado: falso] --historyPath Establecer ruta personalizada donde se almacenará los archivos/archivos del historial [predeterminado: "/var/carpetas/d5/fyh1_f2926q7c65g7skc0qh80000gn/t"] ---remove, -r delete el registro de la historia al ingresar al ingresar al ingresar al ingresar al ingresar "Tipo: entrada" o "todo" para limpiar todo el historial. Por ejemplo: Usuario: Bob [predeterminado: ""] - -Webhookurl Establece la URL de Webhook para recibir el resultado de rascador como solicitudes HTTP. Por ejemplo, a su propia API [predeterminada: ""] -método reciba datos a su URL de webhook como POST o obtenga solicitudes [opciones: "obtener", "Publicar"] [predeterminado: "Publicar"] --help Mostrar ayuda [ Boolean] Ejemplos: TikTok -Scraper User UserName -d -n 100 --Session SID_TT = DAE32131231 TIKTOK -SCRAPER TENDEND -N 100 --Session SID_TT = DAE32131231 TIKTOK -SCRAPER Hashtag Hashtag_Name --D -N 100 --Session Sid_Tt = Dae32131231 Tiktok -scraper Music Music_id -d -n 50 --Session Sid_tt = Dae32131231 Tiktok -Scraper Video https://www.tiktok.com/@tiktok/video/6807491984882765062 --d tiktok-scraper historial tikter : Bob Tiktok-scraper History -R All Tiktok-scraper de Batch_File Async_Tasks -d
Ejemplos terminales
Administrar el historial de descargas
Raspar y descargar en lotes
Al usar Docker, no podrá usar -Filepath y --historyPath, pero puede establecer el volumen ( ruta de host donde se guardarán todos los archivos ) usando -v
Docker Build. -Tiktok-scraper
Ejemplo 1: Todos los archivos, incluido el archivo de historial, se guardarán en el directorio ($ pwd) donde ejecuta el Docker desde
Docker Run -v $ (pwd):/usr/app/archivos tiktok -scraper user tiktok -d -n 5 -s
Ejemplo 2: Todos los archivos, incluido el archivo del historial, se guardarán en/usuario/bla/descargas
Docker Run -v/user/bla/descargas:/usr/app/archivos tiktok -scraper user tiktok -d -n 5 -s
.User (id, opciones) // raspar publicaciones de un usuario específico (promesa) .hashtag (id, opciones) // raspar publicaciones de la sección hashtag (promesa) .trend ('', opciones) // raspar publicaciones de una tendencia Sección (promesa) .Music (ID, Opciones) // Raspe las publicaciones por ID de música (promesa) .UserEvent (id, opciones) // raspan publicaciones de un usuario específico (evento) .hashtagevent (id, opciones) // raspando publicaciones de la sección de hashtag (evento) .trendEvent ('', opciones) // raspan publicaciones de una sección de tendencias (evento) .MusicEvent (id, opciones) // raspan publicaciones por ID de música (evento) .getuserprofileInfo ('username', opciones de opciones ) // Obtener información de perfil de usuario. Gethashtaginfo ('hashtag', opciones) // Obtener información hashtag.signurl ('url', opciones) // Obtener firma para request.getVideometa ('web_video_url', opciones) // Obtener video Información meta, incluida la URL de video sin marca de agua.getMusicinfo ('https://www.tiktok.com/music/original-sound-6801885499343571718', opciones) // Obtener metadata musical metadata
Const Options = {// Número de publicaciones en Scrape: {int predeterminado: 20} Número: 50, // Publicaciones de raspado publicadas desde esta fecha: {int Default: 0} desde: 0, // set session: {string [] Valor predeterminado: ['']} // Se requiere un valor de cookie de sesión autenticado para raspar usuarios/tendencias/music/hashtag feed // Puede poner aquí cualquier número de sesiones, cada solicitud seleccionará una sesión aleatoria de ListSessionList: ['sid_tt = 21312213 '], // establecer proxy {string [] | cadena predeterminada: ''} // http proxy: 127.0.0.1:8080// Socks proxy: Socks5: //127.0.0.1: 8080 // Puede aprobar proxies como una matriz y raspador seleccionará aleatoriamente un proxy desde el array a Ejecute el requestsproxy: '', // establecer en {true} para buscar por ID de usuario: {boolean predeterminado: falso} by_user_id: falso, // cuántas publicaciones deben descargarse de manera asincrónica. Solo si {descargar: true}: {int default: 5} asyncdownload: 5, // cuántas publicaciones deben rasparse asíncronamente: {int default: 3} // La opción actual se aplicará solo con tipos actuales: música y hashtag/ / Con otros tipos siempre es 1 porque cada respuesta de solicitud a la API de TikTok proporciona el valor "maxcursor" // que se requiere para enviar la siguiente requestsyncscraping: 3, // ruta de archivo donde se guardarán todos los archivos: {cadena predeterminada : 'Current_dir'} filepath: `current_dir`, // nombre de archivo personalizado para los archivos de salida: {cadena predeterminado: ''} nombre de archivo:` current_dir`, // La salida con información se puede guardar en un archivo CSV o JSON: {{{ cadena predeterminada: 'na'} // 'csv' para guardar en csv // 'json' para guardar en json // 'all' para guardar en json y csv // 'na' para omitir este stepfileType: `na`, // Establecer encabezados personalizados: agente de usuario, cookies y etc // nota: cuando analiza los metadatos de alimentación de video o de video, a cambio recibirá {encabezados} objeto // que se usó para extraer la información y para acceder y descargue el video a través del valor recibido {videourl} que necesita para usar los mismos cabezas de cabecera: {'user-agent': "bla", referente: 'https://www.tiktok.com/',cookie: `tt_webid_v2 = 68dssds`,, }, // Descargar video sin la marca de agua: {boolean predeterminado: falso} // Establecer en verdadero para descargar sin la marca de agua // Esta opción afectará la ejecución SpeedNowAtermark: False, // Crear enlace a Video HD: {Boolean predeterminado: falso} // Esta opción solo funcionará si {nowatermark} se establece en {true} hdvideo: false, // VerifyFP se usa para verificar la solicitud y evitar Captcha // Cuando está usando proxy, hay grandes posibilidades de que la solicitud la solicitud estará // bloqueado con captcha // puede configurar su propio valor VerifyFP o predeterminado (HardCodeed) se usaráverifyFP: '', // Switch principal al host a Tiktok Test enoint.// Cuando Captcha puede intentarlo Para usar TikTok Test Endpoints.usetestEndpoints: False};
No olvides verificar la carpeta de ejemplos
const tikToksCraper = request ('tikTok-scraper'); // user Feed por UserName (async () => {try {const publica = ALEA TIKTOKSCRAPER.USER ('UserName', {Number: 100, SessionList: ['Sid_tt = 58ba9e344431774703d3c34e60d584475; ']}); console.log (publicaciones);} capt (error) {console.log (error);}}) (); // alimento de usuario por ID de usuario // Algunas id de usuarios de Tiktok son más grandes que max_safeger , necesita pasar la identificación de usuario como una cadena (async () => {try {const publica = Agait tikTokscraper.user (`user_id`, {número: 100, by_user_id: true, sessionList: ['sid_tt = 58ba9e34431774703d3c34e60d584475;'] }); console.log (posts);} capt (error) {console.log (error);}}) (); // tending freed (async () => {try {const Posts = Agait tiktokscraper.trend (Trend ( '', {Número: 100, SessionList: ['Sid_tt = 58Ba9e34431774703d3c34e60d584475;']}); console.log (posts);} catch (error) {console.log (error);}}}) (); feed (async () => {try {const publica = a espera tiktokscraper.hashtag ('hashtag', {número: 100, sessionList: ['sid_tt = 58ba9e344431774703d3c34e60d584475;']}); consolse.log (posts);} captura (captura (capt (captura (} error) {console.log (error);}}) (); // Obtener información de perfil de usuario único: número de seguidores y etc // entrada - nombre de usuario // opciones - no requerido (async () => {try {const {const user = a espera tiktokscraper.getuserprofileinfo ('username', opciones); console.log (user);} capt (error) {console.log (error);}}) (); // Obtener información de hashtag único: número de vistas y etc // entrada - HASHTAG Nombre // Opciones - No requerido (async () => {try {const hashtag = await tiktokscraper.gethashtaginfo ('hashtag', opciones); console.log (hashtag);} capt (error) {console.log (error);}}) (); // Obtener metadatos de video único // entrada - web_video_url // Por ejemplo: https://www.tiktok.com/@tiktok/video/6807491984882765062// option - - - - - - - - - - - - - - - no requerido (async () => {try {const videometa = a espera tiktokscraper.getvideometa ('https://www.tiktok.com/@tiktok/video/6807491984882765062', opciones); consolador.log (videometa);} captettch captetttt (error) {console.log (error);}}) ();
const tiktokscraper = require ('tiktok-scraper'); const usuarios = tikTokscraper.UserEvent ("TikTok", {número: 30}); users.on ('data', json => {// datos en formato JSON}) ; Users.on ('Done', () => {//completed /) ;users.on('error ', error => {// Mensaje de error}); users.scrape (); const Hashtag = TikToksCraper. HashTageVent ("Summer", {Número: 250, proxy: 'Socks5: //1.1.1.1: 90'}); Hashtag.on ('Data', json => {// datos en formato JSON}); Hashtag. ON ('Done', () => {//Completed /) ;hashtag.on('error ', error => {// Mensaje de error}); Hashtag.scrape ();
No requerido
El problema muy común es cuando Tiktok está en la lista negra de su IP/proxy y, en tal caso, puede intentar establecer una sesión y habrá mayores posibilidades de éxito
Obtenga la sesión:
Abra https://www.tiktok.com/ en cualquier navegador
Inicie sesión en su cuenta
Haga clic derecho -> Inspector -> Networking
Página de actualización -> Seleccione cualquier solicitud que se haya realizado al Tiktok -> Vaya a las secciones de encabezado de solicitud -> Cookies
Encuentra en cookies sid_tt valor. Por lo general, se ve así: sid_tt = 521kkadkasdaskdj4j213j12j312;
sid_tt = 521kkadkasdaskdj4j213j12j312; - Este será su valor de cookies de sesión autenticado que debe usarse para raspar el usuario de usuario/hashtag/música/tendencias de tendencias
Establecer la sesión:
CLI :
Ejemplo de contenido /var/bob/sessionList.txt:
Establezca una sola sesión utilizando la opción --session . Por ejemplo --session sid_tt = 521kkadkasdaskdj4j213j12j312;
Establezca ruta en el archivo con la lista de sesiones utilizando la opción --session-archivo . Por ejemplo --session-file /var/bob/sessionList.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
En el módulo puede establecer la sesión configurando la lista de sesión de valor de opción. Por ejemplo , SessionSist: ["SID_TT = 521KKADKASDASKDJ4J213J12J312;", "SID_TT = 12312312312312;"]
Esta parte está relacionada con el uso del módulo (no la CLI)
El valor {videourl} está vinculado al valor de la cookie {tt_wid_v2} que puede contener cualquier valor
Cuando extrae videos del usuario, hashtag, música, feed de tendencia o un solo video, en respuesta, además de los metadatos de video, recibirá un objeto de encabezados que contendrá parámetros que se usaron para extraer los datos. Aquí está la parte importante, para acceder/descargar video a través del valor {VideoUrl} que necesita para usar los mismos valores {encabezados} .
encabezados: {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (khtml, me gusta gecko) Chrome/86.0.4240.80 Safari/537.36", "Referente": "https: /// www.tiktok.com/","cookie ":" tt_wid_v2 = 689854141086886123 "},
Puede pasar sus propios encabezados con las {opciones} .
constantes constantes = {"user-agent": "bob", "referente": "https://www.tiktok.com/","cookie": "tt_wid_v2 = bob"} getVidometa ('web_video_url', {encabezados} ) user ('web_video_url', {encabezados}) hashtag ('web_video_url', {encabezados}) tendencia ('web_video_url', {encabezados}) música ('web_video_url', {encabezados}) // y después de que puede acceder al video {Videourl} valor mediante el uso de los mismos encabezados personalizados
Ejemplo de salida para los métodos: usuario, hashtag, tendencia, música, userevent, hashtagevent, musicentvent, tendEvent
{encabezados: {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (khtml, me gusta gecko) Chrome/86.0.4240.80 Safari/537.36', referente: 'https: // wwwwwwwwwwwwwwwwwwwwwww .tiktok.com/', cookie:' tt_webid_v2 = 689854141086886123 '}, colector: [{id:' video_id ', text:' subtittion ', createTime:' 1583870600 ', authormeta: {id:' user id ', nombre:: Nombre: 'Nombre de usuario', siguiente: 195, Fans: 43500, corazón: '1093998', Video: 3, Digg: 95, Verificado: Falso, privado: Falso, Firma: 'User Bio', Avatar: 'Avatar_url'}, MusicMeta: {MusicID: '6808098113188120838', MusicName: 'bla bla', musicauthor: 'bla', musicoriginal: true, playurl: 'sound/music_url',}, cubre: {default: 'cover_url', origen: 'cover_url', dinámica dinámica : 'Cover_url'}, imageUrl: 'image_url', videourl: 'video_url', videourlnowatermark: 'video_url_without_the_watermark', videometa: {ancho: 480, altura: 864, relación: 14, duración: 14}, diggcount: 2104, sharecount: 1, PlayCount: 9007, CommentCount: 50, menciones: ['@bob', '@sam', '@bob_again', '@and_sam_again'], hashtags: [{id: '69573911', nombre: 'playwithlife',,,, Título: 'Hashtag_title', Cover: [Array]} ...], descargado: true} ...], // if {fileType} y {descargar} Las opciones están enbabilizadas entonces: 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 '], Siguiente: 490, Fans: 38040567, corazón:' 211522962 ', Video: 93, Verificado: Verdadero, Digg: 29,}
{ChallengeId: '4231', desafío: 'Amor', texto: '', cubre: [], CoverSMedium: [], Publicaciones: 66904972, Vistas: '194557706433', ISCommerce: False, Splittitle: ''}
{encabezados: {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebkit/537.36 (khtml, me gusta gecko) Chrome/86.0.4240.80 Safari/537.36', referente: 'https: // wwwwwwwwwwwwwwwwwwwwwww .tiktok.com/', cookie:' tt_webid_v2 = 689854141086886123 '}, colector: [{id:' 6807491984882765062 ', texto:' Estamos innovando la serie #Happyathome Live hoy en 5PM PT! ', Creatime: Creatime: 1584992742',authorMeta: { id: '6812221792183403526', name: 'blah' },musicMeta:{musicId: '6822233276137213677',musicName: 'blah',musicAuthor: 'blah'},imageUrl: 'IMAGE_URL',videoUrl: ' Video_url ', videourlnowatermark:' video_url_without_the_watermark ', videometa: {width: 480, altura: 864, relación: 14, duración: 14}, portadas: {predeterminado:' cover_url ', origen:' cover_url '}, diggcount: 49292, sharecount : 339, PlayCount: 614678, comentario: 4023, descargado: falso, hashtags: [],}]}
{Música: {id: '6882925279036066566', título: 'doja x calabria', playurl: 'dfdfdfdf', coverthumb: 'dfdfdf', covermedium: 'dfdfdff', coverlarge: 'fdfdff', authorname: ': original: original', original ', original', original ', original', original ', original', original ', original', original ', original', original ', original', original ', original', original ', original', original ', original', original: Verdadero, PlayToken: 'ffdfdf', keytoken: 'dfdfdfd', audiourlwithcookie: falso, privado: falso, duración: 46, álbum: '',}, autor: {id: '683530000004094166021', uniqueid: 'Mashupsbybryce', Nickname: Nickname: 'Bryce', avatarThumb: 'dfdfd', avatarmedium: 'dfdfdf', avatarlarger: 'dfdfdf', firma: 'Hi ily :) N70k Sounds Cool tbhn? dz5jzexto0ozoybqiwwhw5tag_im25lko94dm3k ', secreto: falso, ftc: falso, relación: 0, openfavorite: falso, comentarios: 0, duetsetting: 0, stitchsetting: 0, privateAcCount: false,}, estadísticas: {VideoCount: 361700}, Sharemeta: {Título:' Bryceyouloser | ♬ Doja x Calabria | en tiktok ', desclector:' 361.0k videos - ver videos de impresionante cortos ' +' creados con ♬ doja x calabria ',},};
Licencia
MIT
Software libre