Python реализует удаление водяных знаков из коротких видеороликов Douyin и пакетное получение видео с домашней страницы пользователя без водяных знаков.
Python реализует удаление водяных знаков из коротких видеороликов Douyin и пакетное получение видео с домашней страницы пользователя без водяных знаков.

Первые слова

Douyin — это музыкальная и творческая социальная программа для коротких видео, разработанная Toutiao. Программное обеспечение было запущено 20 сентября 2016 года. Это платформа сообщества коротких видео для всех возрастов.

Как активный пользователь Douyin, мне нравится смотреть видео каждый день и смеяться 😄. Но все знают, что видео, загруженные с Douyin, имеют водяные знаки. Программисту с обсессивно-компульсивным расстройством это категорически запрещено. В Интернете существует множество инструментов для удаления водяных знаков. Как они работают? Любопытство заставило меня начать исследование.

Удалить водяной знак из короткого видео

анализировать

Начнем со ссылки общего доступа Douyin. Формат ссылки общего доступа, скопированной из Douyin, следующий:

2.82 wsr:/ Happy birthday to Кобе.%баскетбол %Менталитет Мамбы % День рождения Коби Брайанта https://v.douyin.com/d8LpxMQ/ Скопируйте ссылку, выполните поиск по Daqi Douyin и посмотрите видео напрямую!

Есть адрес ссылки https://v.douyin.com/d8LpxMQ/,Давайте поместим это в браузер,Нашел эту ссылку перенаправленную,Перенаправленный адрес выглядит следующим образом:

https://www.iesdouyin.com/share/video/6999605370222054663/

Кажется, это бесполезно,Давайте возьмем пакет и посмотрим, есть ли интерфейс для запроса видео.,Посмотрите внимательно,кусать。Найденный item_ids интерфейс, а следующее значение — это последняя часть URL-адреса перенаправления (6999605370222054663). Я считаю, что это должен быть идентификатор видео. Адрес интерфейса следующий:

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6999605370222054663

Далее давайте посмотрим на данные, возвращаемые этим запросом интерфейса.,Ух ты,когда я нажимаю наPreviewкогда,Я внезапно стал просветленным,Копирайтинг с видео, автор, музыка, миниатюра, Адрес и т. д.

После того, как я вынул адрес видео, я скопировал его в браузер и открыл. URL-адрес видео следующий:

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fg10000c4hpfk3c77uar6l7cs90&ratio=720p&line=0

Но открыв его, я обнаружил, что водяной знак в левом верхнем углу видео все еще на месте. Посмотрите этот URL playwm,Обнаружить wmЭто немного похоже на название моего проекта,нетwatermarkАббревиатура?я удаляю wm,Затем скопировать зайдите в браузер и откройте его,Появилась волшебная сцена,Водяной знак видео исчез,Так взволнован. Адрес видео без водяного знака следующий:

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000c4hpfk3c77uar6l7cs90&ratio=720p&line=0

Оказывается, удалить водяные знаки с видео Douyin очень просто.,Все еще думаете об алгоритмах видео или о чем-то еще?,Это просто простой анализ. Ха-ха,Это просто заставляет меня чувствовать себя немного 🤭. Теперь, когда вы поняли принцип, стало ли писать код проще и приятнее?

Реализация кода
  • Наша ссылка на видео копировать представляет собой короткую ссылку на видео, смешанную с текстом.,Сначала извлеките ссылку,Давайте воспользуемся обычными правилами, чтобы справиться с этим.
Язык кода:javascript
копировать
 if len(re.findall('[a-z]+://[\S]+', content, re.I | re.M)) > 0:
        return re.findall('[a-z]+://[\S]+', content, re.I | re.M)[0]
  • После извлечения короткой ссылки на видео необходимо перенаправить запрос для получения видео. id。проходитьrequest библиотека для запросов.
Язык кода:javascript
копировать
header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.107 Safari/537.36'}
# URL: перенаправленный URL
response = requests.get(url, headers=header)
return response.url
  • Нам нужно перенаправитьurlЗахват видеоid,как параметры интерфейса item_idsценить。
Язык кода:javascript
копировать
# realUrl: URL-адрес, полученный путем перенаправления.
startUrl = realUrl[0:realUrl.index('?')]
id = startUrl[startUrl.rindex('/') + 1:len(startUrl)]
  • Начните запрашивать интерфейс. GET-запрос, один параметр item_ids
Язык кода:javascript
копировать
 douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo'
 douyinParams = {
                'item_ids': id
            }
 douyinResponse = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
 body = douyinResponse.text
  • json для получения копии видео и адреса видео. Среди них нет ссылок на видео с водяными знаками. playwm быть заменен на play
Язык кода:javascript
копировать
data = json.loads(body)
# видео копирайтинг
videoTitle = data['item_list'][0]['desc']
# URL-адрес водяного знака видео
videoUrl = data['item_list'][0]['video']['play_addr']['url_list'][0]
# Видео без URL-адреса водяного знака
realVideoUrl = f'{videoUrl}'.replace('playwm', 'play')
  • Наконец, мы проходим webbrowser Откройте в браузере библиотеку, воспроизведите видео и наслаждайтесь удовольствием без водяных знаков.
Язык кода:javascript
копировать
webbrowser.open(realVideoUrl)

Все коды следующие:

Язык кода:javascript
копировать
import json
import re
import webbrowser
import requests

def get_url(content):
    if len(re.findall('[a-z]+://[\S]+', content, re.I | re.M)) > 0:
        return re.findall('[a-z]+://[\S]+', content, re.I | re.M)[0]
    return None


def get_redirect_url(url, header):
    # URL: перенаправленный URL
    response = requests.get(url, headers=header)
    return response.url

if __name__ == '__main__':
    douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/92.0.4515.107 Safari/537.36'}
    inputContent = input('Пожалуйста, введите ссылку на видео: ')
    if inputContent.strip() is not None:
        if get_url(inputContent) is not None:
            realUrl = get_redirect_url(get_url(inputContent), headers)
            # realUrl: URL-адрес, полученный путем перенаправления.
            startUrl = realUrl[0:realUrl.index('?')]
            id = startUrl[startUrl.rindex('/') + 1:len(startUrl)]
            douyinParams = {
                'item_ids': id
            }
            if realUrl.__contains__('www.douyin.com/video'):
                douyinResponse = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
                body = douyinResponse.text
                print(douyinResponse.url)
                data = json.loads(body)
                print(data['item_list'][0]['desc'])
                # видео копирайтинг
                videoTitle = data['item_list'][0]['desc']
                # URL-адрес водяного знака видео
                videoUrl = data['item_list'][0]['video']['play_addr']['url_list'][0]
                # Видео без URL-адреса водяного знака
                realVideoUrl = f'{videoUrl}'.replace('playwm', 'play')
                print(realVideoUrl)
                webbrowser.open(realVideoUrl)

Удаляйте водяные знаки из видео списка пользователей в пакетном режиме

анализировать

Основываясь на вышеизложенном принципе удаления водяных знаков в видео, мы продолжаем подробно изучать удаление водяных знаков в видео на личной домашней странице пользователя. я пойду тихокопироватьг-н Лей(Лэй Цзюнь)Поделиться ссылкой на домашнюю страницу。Профиль г-на Лэя в Douyin на домашней странице:“Любовь - это все причины и ответы。”,Так же, как я люблю технологии🤭. Ссылки на контент, размещенные на главной странице, следующие:

Запишите свою прекрасную жизнь на Douyin! https://v.douyin.com/d8NLmmR/

Затем мы перенаправляем URL-адрес общего доступа в браузере. URL-адрес перенаправления выглядит следующим образом:

https://www.iesdouyin.com/share/user/104815668206?u_code=jjjaal8a&sec_uid=MS4wLjABAAAAompXkPoYOGsA152dqYoytKycjIZ_aCCxHwGmLX5IsDM&did=MS4wLjABAAAAMsW9XGYpNp0gdiIm1yrzIfLLUU1Xn3eaP7TecSyN0xU&iid=MS4wLjABAAAAGXkY53W1WOgVg9mNmUzyPBaj5YZ53tZ3DoGXBPdXu4xu4OPn5opAMisJdquNQ1Oo&with_sec_did=1&timestamp=1629787737&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin

На первый взгляд вы можете не увидеть никакой информации, поэтому поместите ее в почтальон и посмотрите параметры запроса.

Посмотрите на это так,Многие параметры выставлены. Далее продолжаем захват пакетов,Внимательно ищите интерфейс списка видео.,Ищите это。кусать,Мое внимание привлек интерфейс,Preview Имеется список данных видеоинформации. URL-адрес интерфейса списка видео выглядит следующим образом:

https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAompXkPoYOGsA152dqYoytKycjIZ_aCCxHwGmLX5IsDM&count=21&max_cursor=0&aid=1128&_signature=.PtrOQAAnehdkkyKHCi4r.z7ay&dytk=

Параметры запроса следующие:

Внимательно читайте значение каждого параметра анализировать,sec_uid и перенаправить URL sec_id То же значение,count Это должно быть количество запросов за раз.,Это также должен быть пейджинговый запрос.。max_cursor Это просто курсор,Используется для запроса следующей страницы。Этот интерфейс значений будет возвращаться каждый раз。aid Не уверен._signature 应该是加密的一个签名。dytk Не уверен. Что делать, если я не знаю этих параметров? Что произойдет, если я удалю их из GET-запроса? Удалите последние три параметра и повторите запрос. Происходит волшебная сцена, а интерфейс все еще открыт. Я скопировал несколько ссылок и заменил их sec_uid,Все еще нет проблем. этот? Пакетное получение прошло успешно,Ха-ха-ха. Интерфейс после удаления выглядит следующим образом:

https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAA5mIrbhVT9ffFBXvDq-3ukbcoZdWrKLzB-J-diEUzit4&count=21&max_cursor=0

Далее приступайте к написанию кода.

Реализация кода

Извлечение ссылок, перенаправление запросов и sec_uid Код перехвата значения такой же, как указано выше.

  • Начните запрашивать интерфейс для получения списка видео. GET-запрос, три параметра.
Язык кода:javascript
копировать
douyinUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/post/'
douyinParams = {
     'sec_uid': id,
     'count': 24,
     'max_cursor': 0,
}
response = requests.get(url=douyinUrl, params=douyinParams, headers=headers)
body = response.text
  • json для получения всех копирайтинговых и видеоадресов списка видео. Здесь получается непосредственно адрес видео без водяных знаков.
Язык кода:javascript
копировать
 data = json.loads(body)
 for content in data['aweme_list']:
     if len(content['video']['play_addr']['url_list']) > 0:
         print(content['desc'] )
         print(content['video']['play_addr']['url_list'][0])
  • Получите список видео для следующей страницы. Просто параметры max_cursor Что-то изменилось. Все копирайтинговые и видео адреса для запроса и получения списков видео такие же, как указано выше.
Язык кода:javascript
копировать
douyinParams = {
    'sec_uid': id,
    'count': 24,
    'max_cursor': data['max_cursor'],
}
  • В интерфейсе есть поле has_more ,Он используется для определения того, есть ли еще видео,has_more =true, это означает, что видео получено.
Язык кода:javascript
копировать
if data['has_more']:
    print('Нет видео')
    exit()
  • Здесь я элегантно обошелся с видеокопией и адресом, которые только что были напечатаны на консоли. Я создаю его локально с помощью douyin.md файл, а затем передать markdown синтаксис, написанный как ссылка на douyin.md в файле,Когда я вижу такую ​​копию,,Нажмите на копию, чтобы воспроизвести видео。markdown Пример синтаксиса ссылки выглядит следующим образом:
Язык кода:javascript
копировать
[видео копирайтинг](Видео адрес)

Напишите код следующим образом:

Язык кода:javascript
копировать
for content in data['aweme_list']:
    with open('douyin.md', 'a', encoding='utf-8') as f:
        if len(content['video']['play_addr']['url_list']) > 0:
            f.write(
                    '[' + content['desc'] + ']' + '(' + content['video']['play_addr']['url_list'][0] + ')' + '  <br />')
  • Наконец, взгляните на скриншот видеосписка г-на Лея, который я получил.

Как насчет этого, неплохо! Если вам понравилось видео девушки, вы можете спокойно сохранить его и посмотреть позже🤭, хахаха.

Подвести итог

Я думаю, что многие вещи такие. Прежде чем я их изучаю, они всегда кажутся непостижимыми. Когда я изучаю принципы технологии, я нахожу их такими простыми. Это показывает, что большинство вещей можно примерно понять, если вы готовы провести исследование. Позвольте мне рассказать вам небольшой секрет. Возможно, это уже не секрет. . . Куайшоу короткое видеоидтиОбработка водяных знаковПодобным образом,Просто добавьте его при получении партиями cookie,Я реализовал код,Заинтересованные друзья могут попробовать это самостоятельно.

заявление

Этот блог предназначен только для изучения Python. В случае каких-либо нарушений, пожалуйста, свяжитесь со мной, чтобы немедленно удалить его. Не используйте его в коммерческих целях. В случае использования последствия не будут иметь никакого отношения к блоггеру.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода