Задать вопрос
  • Как работает SaveFrom?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Универсальный парсер вы не сделаете, каждый сайт по разному отдает контент.
    Нужно сделать запрос на страницу с видео и попытаться найти в исходном коде прямую ссылку на видео и загружать с нее.

    Примерно выглядит все так:
    0. Если у сайта есть API - лучше будет использовать его. Если API имеется - остальные шаги не нужны (конечно, при условии наличия возможности получения прямой ссылки на видео)
    1. Открываете страницу с видео

    2. Через ctrl+U пытаетесь найти прямую ссылку на видео. Обычно она есть в коде. Если нет - пытаетесь понять как видео загружается на страницу, везде по разному. В примере с тиктоком она тут:
    лучше открыть на весь экран картинку
    Прямая ссылка
    5ef21e375ca6e910600401.jpeg

    3. Когда нашли ссылку - проверяете, нужная ли это вам. Далее нужно спарсить ее через bs4/json/re со страницы.
    4. Далее уже можно делать запрос на нее с помощью все той же requests и сохранить в файл

    Пример для тиктока
    import requests
    import json
    from bs4 import BeautifulSoup
    
    # Ссылка на полную страницу
    tiktok_url = 'https://www.tiktok.com/@golden_men_6/video/6803237854542712070'
    
    # Чтобы сайт правильно открылся
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
    
    
    # Запрос на страницу с видео
    r = requests.get(tiktok_url, headers=headers, allow_redirects=True)
    
    # парсинг страницы, ссылка на видео лежит в скрипте с id videoObject, который является JSON
    soup = BeautifulSoup(r.text, 'html.parser')
    script = soup.find('script', attrs={'id': 'videoObject'})
    data = json.loads(script.text)
    video_url = data['contentUrl']
    
    # запрос на прямую ссылку с видео
    r = requests.get(video_url)
    
    #запись
    with open('video.mp4', 'wb') as f:
        f.write(r.content)
    Ответ написан
    1 комментарий
  • Какие игровые движки существуют для Python?

    @WorldEn
    На данный момент для Python есть следующие движки на выбор:

    2D:
    - Cocos 2D (сам лично им не пользовался и ничего сказать не могу, но знаю, что русскоязычное сообщество использует этот движок для с++, вместо python)

    - Kivy (это потомок Pygame, о котором напишу ниже. В основном он предназначен для создания приложений под андроид, но 2D игры тоже на нём делают)

    - Собственно PyGame (Это библиотека Python для создания 2D игр. Очень проста в освоении и есть много уроков и книг на английском и русском. Можно создать практически любую 2D игру. Русское сообщество тоже есть. Хорошая книга на русском здесь)

    - Так же есть 2D + 3D движок с внутренним языком программирования, который очень похож на Python. Т.е если знаешь Python, то этот ЯП освоишь максимум за неделю или даже меньше. Godot Engine

    3D:
    - Из 3D движков единственные это Blender Game Engine. Движок прост в освоении и, в принципе, даже не надо знать языка программирования для создания хорошей игры. Однако если знаешь Python, то это большой плюс, так как скрипты для этого движка пишутся именно на этом языке. Хорошая книжка по движку здесь, а здесь перевод. Примеры игр: раз, два.

    - И , конечно же, Panda 3D. Это не конструктор игр, как Blender Game Engine, где ты создаешь игру, не написав строчки кода. Это конкретный игровой движок, где ты с нуля пишешь код на Python используя API этого движка и создаешь 3D игру. Я сейчас сам его осваиваю и у движка есть живое русскоязычное сообщество, где могут подсказать если что. Так же по движку много видео уроков и книг на английском. Вот одна из этих книг- она на английском, но написано всё понятно, что даже я, не зная инглиш, понимаю))))) Примеры игр: раз, два, три.
    Ответ написан
    9 комментариев
  • В чем ошибка в данной программе?

    IninsaY
    @IninsaY
    Нельзя конкатенировать строку "summ" и число c.
    Варианты решения:

    Просто печатаем вместе, а не конкатенируем
    print("summ", c)

    Переводим переменную c в строку и конкатенируем к 'summ'
    print("summ" + str(c))

    Через format()
    print("summ {}").format(c)

    Так же через format можно добавлять много переменных
    print("summ {} {} {}").format(c, a, b)
    Ответ написан
    Комментировать