Соскребайте и загрузите полезную информацию от Tiktok.
Это не официальная поддержка API и т. Д. Это всего лишь скребок, который использует веб -API Tiktok для очистки медиа и соответствующей мета -информации.
Функции
Делать
Вклад
Установка
Использование
Методы
Параметры
Использовать с обещаниями
Использовать с событиями
Как получить/установить значение сеанса
Как получить доступ/скачать видео
Выводный пример
Методы подачи видео
getuserprofileinfo
Геташтагинфо
GetVideometa
getmusicinfo
Строить
Бегать
Терминальные примеры
Управление историей скачивания
Скачать и скачать в партии
Пример выходного файла
В терминале
Докер
Модуль
На данный момент невозможно скачать видео без водяного знака
Скачать неограниченные пост-метаданные с страниц пользователя, хэштега, тенденций или музыки
Сохранить метаданные после файлов JSON/CSV
Загрузите носитель с водяным знаком и без него и сохраните в файл ZIP
Скачать одно видео без водяного знака от CLI
Подписать URL для получения пользовательского запроса на API Tiktok
Извлеките метаданные из пользователя, хэштега и отдельных видео страниц
Сохраните предыдущий прогресс и скачайте только новые видео, которые не были загружены ранее . Эта функция работает только от CLI и только в том случае, если флаг загрузки включен.
Просмотреть и управлять ранее загруженными историей постов в CLI
Пользователь, хэштег, музыкальные каналы и отдельные видео, указанные в файле в режиме пакетного режима
CLI: Сохраните прогресс, чтобы избежать загрузки одних и тех видео
Перепишите все в TypeScript
Улучшить поддержку прокси
Добавить тесты
Скачать видео без водяного знака
Укажите в выходном файле (CSV/JSON), если видео было загружено или нет
Построить и бежать от Docker
CLI: соскребайте и скачайте в партии
CLI: Загрузите прокси из файла
CLI: необязательный Zip
Обновление API
Установите URL Webhook (CLI)
Добавьте новый метод для сбора музыкальных метаданных
Добавить ручную страницу
Улучшить документацию
Скачать аудиофайлы
Веб -интерфейс
Не забывайте о тестах
Тест пряжи
Строительство пряжи
Tiktok-Scraper требует node.js V10+ для запуска.
Установите из NPM
npm i -g tiktok -scraper
Установите из пряжи
Yarn Global Add Tiktok-Scraper
$ tiktok-scraper-help Использование: Tiktok-Scraper <Команда> [Параметры] Команды: Пользователь Tiktok-Scraper [ID] Скрапейте видео из имени пользователя. Введите только имя пользователя Tiktok-Scraper hashtag [id] Скраппиап видео из хэштега. Введите хэштег без # Tiktok-Scraper Trend Scrape Posts из текущих тенденций Tiktok-Scraper Music [id] Скрейп постов с идентификатора музыки Tiktok-Scraper Video [id] Скачать одно видео без водяного знака Tiktok-Scraper History Просмотреть предыдущую историю скачивания Tiktok-Scraper из файла file [async] Сокращение пользователей, хэштеги, музыка, видео, упомянутые файл. 1 значение на 1 строку Параметры: -Версия Показать номер версии [Boolean] -Сессионная сеанс. Значение cookie. Иногда сеанс может быть Полезно при скребке данных из любого метода [по умолчанию: ""] -Установив путь к файлу с списком активных сеансов. Один Сессия за строку! [по умолчанию: ""] -Время установки тайм-аута между запросами. Тайм -аут в миллисекундах: 1000 мл = 1 с [по умолчанию: 0] -Наймке, -n Количество постов для очистки. Если вы установите 0, то все Сообщения будут скрещены [по умолчанию: 0] -Следовательно, не соскребайте посты, опубликованные до этой даты (TimeStamp). Если установить на 0 фильтр деактирован [по умолчанию: 0] -Пори, -p Установите отдельный прокси [по умолчанию: ""] -Прокси-файл используйте прокси из файла. Scraper будет использовать случайные прокси из файла по каждому запросу. 1 строка 1 прокси. [по умолчанию: ""] -Да -Download, -d Скачать видео посты в папку с именем ввода [id] [boolean] [по умолчанию: false] -Asyncdownload, -a количество параллельных загрузок [по умолчанию: 5] -HD скачать видео в HD. Размер видео будет на x5-x10 раза больше, и это повлияет на скорость выполнения скребков. Этот Опция работает только в сочетании с флагом -W [Boolean] [по умолчанию: ложь] --zip, -z Zip все загруженные видео посты [boolean] [по умолчанию: false] -FilePath Pail Path для сохранения всех выходных файлов. [по умолчанию: "/Users/karl.wint/documents/projects/javascript/tiktok-craper"] -Филетип, -t Тип выходного файла, где будет информация о публикации сохранил. «Все» -Сохраните информацию обо всех сообщениях для «json» и «csv» [выбор: «csv», «json», «all», «" "] [default:" "] -filename, -f set Пользовательское имя файла для выходных файлов [по умолчанию: ""] -nowatermark, -W Скачать видео без водяного знака. ПРИМЕЧАНИЕ. С недавним обновлением вам нужно использовать эту опцию только в том случае, если вы очищаете хэштег. Пользователи/тренд/музыкальные каналы будут иметь этот URL -адрес по умолчанию [boolean] [по умолчанию: false] -Store, -s Scraper сохранит прогресс в TMP OS или пользовательском папке, и в будущем использовании будет загружаться только новые видео, избегая дублирования. [boolean] [по умолчанию: false] -historyPath Установите пользовательский путь, где будет храниться файл истории/файлы истории [по умолчанию: "/var/folders/d5/fyh1_f2926q7c65g7skc0qh80000gn/t"] - -remove, -r Делете «Тип: вход» или «все», чтобы очистить всю историю. Например: Пользователь: Боб [по умолчанию: ""] -Webhookurl Установите URL -адрес webhook для получения результата скрещин в качестве HTTP -запросов. Например, в ваш собственный API [по умолчанию: ""] -Метод Boolean] Примеры: Tiktok -Scraper User username -d -n 100 - -сессия SID_TT = DAE32131231 TIKTOK -SCRAPER TREND -D -N 100 - -Сессия SID_TT = DAE32131231 TIKTOK -SCRAM DAE32131231 Tiktok -Scraper Music Music_id -d -n 50 -Сессия SID_TT = dAE32131231 : Bob Tiktok-Scraper History -r All Tiktok-Scraper от file batch_file async_tasks -d
Терминальные примеры
Управление историей скачивания
Скачать и скачать в партии
Используя Docker, вы не сможете использовать -FilePath и -historyPath, но вы можете установить громкость ( путь хоста, где будут сохранены все файлы ), используя -v
Docker Build. -t Tiktok-Scraper
Пример 1: Все файлы, включая файл истории, будут сохранены в каталоге ($ pwd), где вы запускаете Docker от
Docker run -v $ (pwd):/usr/app/files tiktok -scraper пользователь Tiktok -d -n 5 -s
Пример 2: Все файлы, включая файл истории, будут сохранены в/user/blah/загрузки
Docker run -v/user/blah/загрузки:/usr/app/files tiktok -scraper пользователь Tiktok -d -n 5 -s
.user (id, опции) // Сокращение сообщений от конкретного пользователя (обещание) .hashtag (id, опции) // Состчисты Раздел (обещание) .music (id, опции) // Состчистые сообщения от музыки идентификатора (обещание) .UseRent (id, параметры) // Состчисты Из разделения хэштега (Event) .trendevent ('', options) // Состчистые сообщения из разделения тенденций (событие) .musicevent (id, опции) // Сообщения от Scrape от Music ID (Event) .getUserProfileInfo ('username', Options ) // Получить информацию о профиле пользователя.gethashtaginfo ('hashtag', options) // get hashtag information.signurl ('url', options) // Получить подпись для request.getvideometa ('web_video_url', options) // Получить видео. Мета информация, включая видео URL без watermark.getmusicinfo ('https://www.tiktok.com/music/original-sound-6801885499343571718', опции) //
const options = {// Номер сообщений для Scrape: {int default: 20} Номер: 50, // Сообщения Scrape, опубликованные с этой даты: {int default: 0} С момента: 0, // set session: {string [] по умолчанию: ['']} // Аутированное значение cookie для сеанса требуется для сокраски пользователя/trending/music/hashtag feed // Вы можете поместить здесь любое количество сеансов, каждый запрос выберет случайный сеанс из ListsessionList: ['sid_tt = 21312213 '], // set proxy {string [] | строка по умолчанию: ''} // http proxy: 127.0.0.1:8080// socks proxy: socks5: //127.0.0.1: 8080 // Вы можете передать прокси в качестве массива, а скребок случайным образом выбирать прокси из массива в Выполните запросы: '' ', // Установить в {true} для поиска по идентификатору пользователя: {boolean default: false} by_user_id: false, // сколько поста следует загрузить асинхронно. Только если {скачать: true}: {int default: 5} asyncdownload: 5, // Сколько сообщений должно быть скранировано асинхронно: {int default: 3} // Текущая опция будет применяться только с текущими типами: музыка и хэштаг // / С другими типами это всегда 1, потому что каждый ответ на запрос на API Tiktok предоставляет значение «maxcursor» //, которое необходимо для отправки следующего запроса offerAsyncScraping: 3, // Путь файла, где все файлы будут сохранены: {строка default default : 'Current_dir'} filePath: `current_dir`, // пользовательское имя файла для выходных файлов: {string default: '' '} имя файла:` current_dir`, // Вывод с информацией можно сохранить в файлах CSV или JSON: { строка по умолчанию: 'na'} // 'csv', чтобы сохранить в csv // 'json', чтобы сохранить в json // 'all', чтобы сохранить в json и csv // 'na', чтобы пропустить этот StepfileType: `na`, // Установить пользовательские заголовки: пользователь-агент, cookie и т. Д. // Примечание: когда вы анализируете видео-канал или отдельные метаданные видео и скачать видео через полученное {videourl} значение, которое вам нужно использовать одинаковые головы: {'user-agent': "blah", referer: 'https://www.tiktok.com/',,Куки: `tt_webid_v2 = 68dssds`, }, // Скачать видео без водяного знака: {boolean default: false} // set to true для загрузки без Watermark // Эта опция повлияет на выполнение Speednowatermark: false, // Создание ссылки на HD видео: {Boolean Default: false} // Эта опция будет работать только в том случае, если {nowatermark} установлен на {true} hdvideo: false, // verifyfp используется для проверки запроса и избежать капчи // Когда вы используете прокси, есть высокие шансы, что запрос будет // заблокирован с помощью CAPTCHA // Вы можете установить собственное значение VerifyFP или по умолчанию (жестко -кодирование) будет использоваться. Чтобы использовать конечные точки теста Tiktok.useTestendPoints: false};
Не забудьте проверить папку примеров
Const TiktokScraper = require ('tiktok-scraper'); // Пользователь пользователя username (async () => {try {const props = watait tiktokscraper.user ('username', {number: 100, sessionList: ['sid_tt = 58ba9e344431774703d3c34e60d584475; ']}); console.log (posts);} catch (error) {console.log (error);}}) (); // Пользовательский идентификатор пользователя // Некоторые идентификаторы пользователя Tiktok больше Max_safe_integer , вам нужно передать идентификатор пользователя в виде строки (async () => {try {const prots = wawit tiktokscraper.user (`user_id`, {number: 100, by_user_id: true, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475; }); console.log (posts);} catch (error) {console.log (error);}}) (); // Трендовый корм (async () => {try {const posts = await tiktokscraper.trend ( '', {number: 100, sessionList: ['sid_tt = 58ba9e34431774703d3c34e60d584475;']}); console.log (posts);} catch (error) {console.log (ошибка);}}) (); FEED (async () => {try {const posts = await tiktokscraper.hashtag ('hashtag', {number: 100, sessionlist: ['sid_tt = 58ba9e34431774703d3c34e60d584475; ошибка) {console.log (erry);}}) (); // Получить информацию о профиле одного пользователя: количество подписчиков и т. Д. // Вход - Имя пользователя // Опции - не требуется (async () => {try {const user = await tiktokscraper.getuserprofileinfo ('username', options); console.log (user);} catch (error) {console.log (error);}}) (); // Получить отдельную информацию о хэштаге: количество просмотров и и т. Д. // Ввод - Имя хэштага // Опции - не обязательно (async () => {try {const hashtag = watait tiktokscraper.gethashtaginfo ('hashtag', options); console.log (hashtag);} Catch (ошибка) {console.log (error);}}) (); // Получить одно видеоматадаты // input - web_video_url // Например: https://www.tiktok.com/@tiktok/video/680749198482765062// Опционы Не требуется (async () => {try {const videoMeta = await tiktokscraper.getvideometa ('https://www.tiktok.com/@tiktok/video/68074984882765062', варианты); консоли. (ошибка) {console.log (erry);}}) ();
Const TiktokScraper = require ('tiktok-scraper'); const users = tiktokscraper.userevent ("tiktok", {number: 30}); users.on ('data', json => {// Данные в формате json}) ; users.on ('dode', () => {//completed) [users.on(''error ', error => {// Сообщение об ошибке}); users.scrape (); const hashtag = tiktokscraper. hashtagevent («Лето», {номер: 250, прокси: 'socks5: //1.1.1.1: 90'}); hashtag.on ('data', json => {// данные в формате json}); hashtag. on ('dode', () => {//completed) [hashtag.on(''error ', error => {// Сообщение об ошибке}); hashtag.scrape ();
Не обязательно
Очень распространенная проблема заключается в том, когда Tiktok влечет за собой в черный список вашего IP/прокси, и в таком случае вы можете попытаться установить сеанс, и будет более высокие шансы на успех
Получите сессию:
Откройте https://www.tiktok.com/ в любом браузере
Войдите в свою учетную запись
Щелкните правой кнопкой мыши -> Инспектор -> сеть
Страница обновления -> Выберите любой запрос, который был сделан в Tiktok -> Перейдите в разделы заголовка запроса -> cookie
Найдите в файлах cookie sid_tt value. Обычно это выглядит так: SID_TT = 521KADKASDASKDJ4J213J12J312;
SID_TT = 521KADKASDASKDJ4J213J12J312; - Это будет ваша аутентифицированная ценность cookie с сеансом, которое следует использовать для очистки пользователя/хэштега/музыки/трендового канала
Установите сеанс:
CLI :
Пример Content /var/bob/sessionList.txt:
Установите отдельный сеанс, используя опцию - -сеанс . Например - -сессия SID_TT = 521KADKASDASKDJ4J213J12J312;
Установите путь к файлу со списком сеансов, используя опцию --сессия . Например --сессия file /var/bob/sessionlist.txt.txt
sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312; sid_tt=521kkadkasdaskdj4j213j12j312;
В модуле вы можете установить сеанс, установив список SessionList. Например , SessionList: ["SID_TT = 521KADKASDASKDJ4J213J12J312;", "SID_TT = 12312312312312;"]
Эта часть связана с использованием модуля (не CLI)
Значение {videourl} приводится к значению cookie {tt_webid_v2} , которое может содержать любое значение
Когда вы извлекаете видео из пользователя, хэштег, музыку, трендового канала или отдельного видео, затем в ответ, помимо метаданных видео, вы получите объект заголовков , которые будут содержать параметры, которые использовались для извлечения данных. Вот важная часть, чтобы получить доступ/загрузить видео через {Videourl} Значение, которое вам нужно использовать одинаковые значения {заголовки} .
Заголовки: {"Пользовательский агент": "Mozilla/5.0 (Macintosh; Intel Mac OS x 10_15_5) AppleWebkit/537.36 (khtml, как гекко) Chrome/86.0.4240.80 Safari/537.36", "СЕРИЕР": "https: // или// www.tiktok.com/","cookie ":" tt_webid_v2 = 689854141086886123 "},
Вы можете передать свои собственные заголовки с помощью {опций} .
const headers = {"user-agent": "bob", "referer": "https://www.tiktok.com/","cookie": "tt_webid_v2 = bob"} getvideometa ('web_video_url', {headers} ) user ('web_video_url', {headers}) hashtag ('web_video_url', {headers}) trend ('web_video_url', {headers}) music ('web_video_url', {headers}) // и после доступа к видео через видео {Videourl} значение с использованием тех же пользовательских заголовков
Пример вывода для методов: пользователь, хэштег, тренд, музыка, Userevent, Hashtagevent, Musicevent, Trendevent
{заголовки: {'пользователь-агент': 'mozilla/5.0 (macintosh; intel mac os x 10_15_5) Applewebkit/537.36 (khtml, как гекко) Chrome/86.0.4240.80 Safari/537.36, SERESK: .tiktok.com/', cookie:' tt_webid_v2 = 689854141086886123 '}, Collector: [{id:' video_id ', текст:' Подпись ', CreateTime:' 1583870600 ', Authormeta: {id:' Пользовательский идентификатор: " «Имя пользователя», следующее: 195, фанаты: 43500, сердце: '1093998', видео: 3, Digg: 95, проверка: false, private: false, подпись: «Bio User Bio», Avatar: 'avatar_url'}, MusicMeta: {MusicID: '6808098113188120838', musicName: 'blah blah', musicauthor: 'blah', musicoriginal: true, playurl: 'sound/music_url',}, covers: {default: 'cover_url', Origin: 'cover_, dynamic : 'Cover_url'}, imageurl: 'image_url', videourl: 'video_url', videourlnowatermark: 'video_url_without_the_watermark', videometa: {width: 480, высота: 864, соотношение: 14, продолжительность: 14}, Diggcount: 2104, Sharecount: Sharecount: Sharecount: Sharecount: Sharecount: ShareCount: Shareio: 14, DOUDUTY: 14}, DiggCount: 2104: 1, PlayCount: 9007, CommentCount: 50, упоминания: ['@bob', '@sam', '@bob_again', '@and_sam_again'], хэштеги: [{id: '69573911', имя: 'playwithlife' Название: 'hashtag_title', cover: [array]} ...], загрузка: true} ...], // if {filetype} и {загрузка} параметры. .zip ', json:'/;current_path)
{secuid: 'ms4wljabaaaav7isuuxdjgdvjkmh_vz1qkdzyo1apxgzaxdbseiupim', userid: '107955', issecret: false, уникальный: 'tiktok', никнам: 'tiktok', seargature: 'Make Your Day', Cupsume: [Cupsumme ', [Cupsumme', [Cupsumme ', [Cupsumme', [Cupsumme '? '], следующее: 490, поклонники: 38040567, сердце:' 211522962 ', видео: 93, проверка: true, digg: 29,}
{ChallengeId: '4231', Challenge Engement: «Love», Text: '', Covers: [], CoversMedium: [], посты: 66904972, просмотры: '194557706433', iscommerce: false, splittitle: ''}
{заголовки: {'пользователь-агент': 'mozilla/5.0 (macintosh; intel mac os x 10_15_5) Applewebkit/537.36 (khtml, как гекко) Chrome/86.0.4240.80 Safari/537,36, refer: .tiktok.com/', cookie:' tt_webid_v2 = 689854141086886123 '}, Коллекционер: [{id:' 6807491984882765062 ', Текст: «Мы начнем с серии #HappyAthome Live Stream сегодня в 5 часов вечера! 1584992742 ', Authormeta: {id:' 6812221792183403526 ', имя:' blah '}, musicmeta: {musicid:' 6822233276137213677 ', musicName:' blah ', musicauthor:' blah Video_url ', videourlnowatermark:' video_url_without_the_watermark ', videometa: {width: 480, высота: 864, соотношение: 14, длительность: 14}, обложки: {по умолчанию:' cover_url ', происхождение:' Cover_url '}, Diggcount: 49292, ShareCount : 339, PlayCount: 614678, CommentCount: 4023, загружен: False, хэштеги: [],}]}
{Music: {id: '6882925279036066566', название: 'Doja x Calabria', Playurl: 'dfdfdfdf', Coverthumb: 'dfdfdf', covermedium: 'dfdfdf', coverarge: 'fdfdf', authronam 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', подпись: «Привет :) n70k звучит круто tbhn? DZ5JZEXTO0OSOYBQIWWHW5TAG_IM25LKO94DM3K ', секрет: false, ftc: false, отношение: 0, openfavorite: false, комментарии: 0, Duetsetting: 0, STITCHSITING: 0, PrivateAccount: false,}, Stats: {videoCount: 361700}, ShareMeta: {TIP:' Bryceyouloser | ♬ Doja x Calabria | на Tiktok ', desc:' 361.0k Videos - Смотреть потрясающие короткие видео ' +' видео, созданные с ♬ doja x calabria ',},};
Лицензия
Грань
Свободное программное обеспечение