• Как решить ошибку: asyncpg.exceptions._base.InterfaceError: cannot perform operation: another operation is in progress?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Видимо, проблема в том, что вы пытаетесь использовать одно соединение несколькими сопрограммами. Используйте пул.
    Ответ написан
    2 комментария
  • Подойдет ли mysql для работы с aiogram?

    mayton2019
    @mayton2019
    Bigdata Engineer
    При 700 наверное вообще любая БД подойдет.
    Но тут надо еще отметить что архитектура БД выбирается исходя из наиболее типичных запросов.
    Например для установления дружбы между людей в соц-сетях и для принятия маркетинговых решений
    берут графовую БД. Для хранения сета вариативных документов - берут Mongo. Для финансовых транзакций
    с историей - берут классические реляционные типа Oracle/PG.
    Ответ написан
    Комментировать
  • Как заставить даты поменяться?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Положите все даты в список, отсортируйте его.
    Сделайте цикл по элементам этого списка. В каждой итерации делайте ожидание текущей даты, а потом печать. И так дальше по списку.
    Ожидание можно сделать с помощью time.sleep. Нужно вычислить период между текущей датой-временем и очередной, выразить этот период в секундах.
    Ответ написан
    Комментировать
  • Как отформатировать таблицу в pandas?

    @o5a
    Pandas выдает правильно отформатированную таблицу. Просто проблема в том, что для текста в телеграм используется не моноширинный шрифт, поэтому при ее отображении колонки так съезжают.
    Чтобы исправить это, можно указать ему четко следовать форматированию, добавив тэг 'pre' и обработку как html. Так должно сработать.
    def SWHL_sniper():
        url = "http://www.swhl.ru/tournament/1026071/stats?common=1"
        response = requests.get(url)
        df_list = pd.read_html(response.text)
        return df_list[0].to_string(index=False)
    
    table = SWHL_sniper()
    text=f'<pre>{table}</pre>'
    bot.send_message(message.chat.id, text=text, parse_mode='HTML')
    Ответ написан
    6 комментариев
  • Почему новичкам часто советуют парсинг?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Парсинг - это очень простое ТЗ которое можно привязать к опыту работы с сетью и с реальными а не учебными данными. Я думаю что такие ТЗ создают очень ленивые преподаватели и инструкторы. Которые обязательно воспользуются результатом вашего труда. Коллекция парсеров магазинов пром-товаров может быть собрана в пакет и перепродана кому-то еще.

    Парсинг для самого разработчика - это дно-днищенское. Очень быстро прокачаете опыт в BeautifulSoup но кроме этого дальше расти некуда. Парсинг с точки зрения договорённостей о сетевом контракте (endpoint, Swagger, SOAP, gRPG) это тоже сплошное кидалово. Что-бы вы не дизайнили - владелец сайта в любой момент может сломать просто изменив спецификацию или дизайн. Это ставит вас в заведомо рабское положение. Вроде как работу проделали но за 1 день до релиза сайт сделал редизайн и всё зря. А никто не заплатит.

    Я парсил исключительно из любопытсва. Только не на Python а на других языках. Создавал базу прокей (штук 100) и пытался работать через них в параллелизме. Типа аккуратненько. Чтоб не было очевидно. Прокси ломаются. Отъезжают. Вобщем забавно. Можно потратить кучу времени но ненадежно. Все что бесплано - ненадежно.

    Мой друг парсил валютные биржи. Но не ради парсинга а ради самих данных. Это было полезно. Он гонял на них нейросетевые алгоритмы. Торговые роботы типа.

    По поводу опыта работы с Selenium. Я не использовал никогда. Но я думаю что это очень полезный опыт если вы докажете что делаете любые штуки - можете пойти тестером автоматизатором в большую корпорацию. Это уже на несколько левелов выше чем парсинг сайтов. И оплата стабильная.

    Вобщем как цель жизни парсинг - втопку. Но как некий опыт. Попробовать. Поймать тыщи HTTP-ошибок. Парсить разные виды респонсов - это я считаю полезно.
    Ответ написан
    1 комментарий
  • Как спарсить данные с сайта?

    @egorzenit
    Самое простое что приходит в голову

    Взять все теги "a" на странице у которых класс "table__player" выполнить Парсинг имени у каждого тега, а поскольку все номера идут по списку на этой странице, использовать enumarate и записывать индекс каждого игрока рядышком с именем.
    Ответ написан
    Комментировать
  • Состояния в FSM срабатывают со второго раза. Как это исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Как написано - так и работает. Делаем /start - получаем стейт choice и кнопки. Нажимаем "добавить задачу" - получаем стейт add_task и больше в этом обработчике ничего не делается! И только после второго нажатия срабатывает обработчик "добавить задачу" из стейта add_task.

    Правильно убрать вообще обработчик для choice и вместо этого указать условия вида state=choice непосредственно у всех обработчиков.
    Ответ написан
    1 комментарий