CoderCastrov logo
CoderCastrov
Тик Ток

Парсинг скрытого API с использованием библиотеки Python Requests, например, TikTok

Парсинг скрытого API с использованием библиотеки Python Requests, например, TikTok
просмотров
4 мин чтение
#Тик Ток

Привет, это моя первая статья на Medium, сегодня я хотел бы рассказать о... ну, заголовок говорит сам за себя. Недавно TikTok изменил параметры своего API, и сегодня я покажу, как парсить некоторые видео. Давайте начнем.

Ссылка на Colab с кодом, если вы хотите пропустить чтение: ссылка на Colab

Прежде чем мы начнем, мы будем использовать Google Colab, так как это отличная платформа для программирования на Python. Нет необходимости устанавливать какие-либо пакеты, но если их нет, вы всегда можете установить их с помощью команды pip install, но с ! в начале, например:

!pip install <название_пакета>

В любом случае, перейдите на Colab, да, вам будет предложено войти в свою учетную запись Google, но я предполагаю, что у большинства людей уже есть такая учетная запись, поэтому просто войдите. Если нет, создайте одну, так как это изменит вашу жизнь. Скорость загрузки здесь супер, и нет необходимости долго ждать, но, конечно, вы также можете использовать PyCharm или любую другую IDE, которую у вас есть. Теперь мы будем парсить видео, используя музыку на TikTok, например песню: Myself by Bazzi.

Поиск API ссылки

Мы собираемся найти ссылку на API, щелкните правой кнопкой мыши на странице и перейдите к элементу "Инспектировать". Обратите внимание, что я использую Google Chrome.

затем перейдите к вкладке Сеть.

Очистить журнал

Убедитесь, что вы включили сохранение журнала и отключили кэш. Теперь сначала очистите журналы, а затем обновите страницу, прокрутите немного вниз и дождитесь появления журналов. См. изображение выше. Прокрутите немного вниз, затем измените все на fetch/xhr, чтобы получить наши данные, а затем отфильтруйте по размеру. Для этого щелкните правой кнопкой мыши на имени и выберите размер, а затем щелкните на Размер.

Как видим, это 30,1 КБ, что означает, что наши данные находятся здесь. Давайте проверим это. Нажмите на ?msToken... и затем выберите Предварительный просмотр.

Теперь нам нужно воспроизвести это с помощью requests. Перейдите в Colab и создайте новый документ. Затем перейдите на TikTok, а затем в Заголовки.

Скопируйте значение и перейдите по ссылке в новой вкладке вашего браузера. Как видим, возвращается сообщение

{"statusCode":10201,"statusMsg":"missing required fields..."}

Это означает, что некоторые из наших параметров отсутствуют. После некоторых проверок и проб и ошибок я выяснил, что параметры были в params.

Хорошо, давайте скопируем все заголовки во вкладке Заголовки и вставим их в новую ячейку в Colab. Оттуда мы сможем декодировать и изменять данные. Прежде чем перейти в Colab, проверьте метод запроса в заголовке API. Как видим, это GET запрос.

Репликация данных из API в Colab

Как мы знаем, в запросах можно использовать параметры, такие как заголовки, параметры запроса, файлы и т. д. В этом запросе мы будем использовать метод GET и будем передавать параметры в заголовках и параметрах запроса. Мы скопируем эти два параметра и затем разберем их. Я написал код для разбора, потому что вручную это довольно трудоемко. Да, мы можем опустить некоторые переменные, но мы не будем этого делать, так как каждый параметр имеет значение для TikTok, но вы можете опустить некоторые, такие как cookies и т. д. В любом случае,

import requests
import pandas as pd
from urllib.parse import urlencode as encoder

Мы будем использовать pandas для экспорта наших данных в формате CSV. Вы можете использовать JSON, но мы хотим, чтобы наши данные были красивыми. Мы импортируем urlencode из urllib.parse, потому что нам нужно закодировать параметры, чтобы передать их в качестве параметра в запросы.

После выбора всех заголовков запросов во вкладке "Сеть" мы вставляем их следующим образом:

X = '''
authority: m.tiktok.com
m....
'''

Мы видим здесь шаблон, поэтому теперь мы эксплуатируем этот шаблон с помощью следующего кода:

headers = {}
for i in X.split('\n'):
   headers[i.split(':')[0]] = i.split(':')[1][1:]
print(headers)

Наши данные теперь красиво оформлены в формате заголовков. Мы можем вручную изменить параметры запроса на словарь, так как это немного проще.

params = {
   'msToken': '<данные...>',
   'X-Bogus': '<данные...>',
   '_signature': '<данные...>',
}

Наши <данные...> - это значения из запросов в заголовках. Теперь мы можем выполнить наши запросы.

url = 'https://m.tiktok.com/api/music/item_list/?'
data = requests.get(url, 
                    headers=headers,
                    params=encoder(params, safe='='))
if data.status_code == 200:
  print(data.json())
  df = pandas.DataFrame(data.json()['itemList'])
else:
  print(data.status_code)

Наши результаты

Прежде чем закончить, вы можете загрузить больше данных из того же списка музыки. Вам нужно будет прокрутить дальше вниз и скопировать только x-tt-params, так как это будет ключом для загрузки дополнительных данных, второй страницы. Я сделаю ссылку на Colab более удобной и простой в использовании.

Спасибо за чтение и извините, если это было немного длинно. Если у вас есть вопросы, пожалуйста, напишите мне на электронную почту: surenjanath.singh@gmail.com

В моей следующей статье я покажу, как скачать видео и сохранить его. Написано: 6 сентября 2021 года.

Обратите внимание, что API постоянно улучшается и изменяется, чтобы избежать подобных действий, как показано выше.

Ресурсы: Посмотрите это: https://github.com/davidteather/TikTok-Api https://docs.python-requests.org/en/master/