• Какой выбрать стек технологий?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Какой выбрать стек технологий?

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

    Учитывая, что Вы указали Python, то:
    - Back: Python + Django или FastAPI (если не будет хватить Django).
    - Front: Python (Django templates), либо отдельный фронт на React/Vue (если будет иметь смысл).
    Python + Flask и связанное с этим, например, Bootstrap и тому подобное

    Bootstrap не имеет никакого отношения к Python и его экосистеме.
    Мобильное приложение для Android, которое по сути повторяло бы функциональность WEB, но со своими собственными оговорками.

    От самого простого:
    - Cordova.
    - React Native.
    - Flutter.
    - Java и Kotlin смысла не вижу рассматривать в Вашем случае.
    Ответ написан
    Комментировать
  • Как парсить без бана?

    @Verz1Lka
    Web scraping expert
    Согласен с предыдущим пользователем.
    Хотите парсить в промышленных масштабах - покупайте прокси. Можно покупать общие с другими пользователями прокси, можно выделенные. Торовские ноды банят почти на первом этапе, если начинают защищать сайт.
    Да, можно так-же использовать разные cookie сессии. Хорошее решение - отдельная сессия для каждого прокси. Однако на практике могу сказать, что сайты редко анализируют именно поведение пользователя, чтоб детектить бота, это скорее уже какие-то крутые специальные антискрапинговые системы могут себе позволить.
    Ответ написан
    Комментировать
  • Почему ничего не выводится хотя ошибок нет?

    HemulGM
    @HemulGM Куратор тега Python
    Delphi Developer, сис. админ
    Да вы задрали. Всё он выводит. Программа сразу закрывается, потому что она не обязана ждать. Она ЗАВЕРШИЛАСЬ!
    input() после print напиши и не закроется, пока не нажмешь что-то
    Ответ написан
    1 комментарий
  • Как отчистить глобальное окружение python?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Разобраться, как работают виртуальные окружения. Создавать их для каждого проекта, активировать и из них производить установку библиотек посредством pip для данного проекта.

    Что касается «глобального интерпретатора», то это тот, папка которого указана первой в системном path.
    Ответ написан
    Комментировать
  • Какая книга по Python самая лучшая для новичков и продолжающих?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Лучше Лутца ничего не было и нет.
    Ответ написан
    3 комментария
  • Как работать с БД из другого класса?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Из приведённого кода не понятно для чего вообще выделен класс Sql.
    Фактически вы используете только один метод этого класса, а содержимое конструктора можно разместить в том же методе.
    Бессмысленно и беспощадно.
    Самое правильное - это делать всё как можно проще.
    Вот два очень полезных принципа в разработке:
    - https://ru.wikipedia.org/wiki/KISS_(принцип)
    - https://ru.wikipedia.org/wiki/Бритва_Оккама

    В приведённом вами куске кода не нужен класс sql, достаточно сделать всё внутри одной функции, ведь вы не используете созданный обьект больше никак.
    Другой вопрос, если вам нужно делать много запросов в рамках одного подключения к БД. На подключение тратяся некоторые накладные расходы по времени и трафику, иногда логично вынести подключение и хранить его в выделенном персистентном состоянии, которое будет создано один раз и переиспольовано для множества запросов. В этом случае закрывать коннект после запроса нельзя.
    Прочитайте вот: https://pavel-karateev.gitbook.io/intermediate-pyt...
    Обычно коннект к БД уже является менеджером контекста. Для чего вы делаете вот эту бессмысленную обёртку вокруг - не ясно.
    В соответствии с хоошим стилем прогаммирования нужно, чтобы действие любой функции можно было охарактеризовать простой короткой фразой без союзов, без "и" и "или", без "если".
    Иначе эту функцию стоило бы разбить на более мелкие и простые функции.
    Вот ознакомьтесь с концепцией чистой функции: https://dvmn.org/encyclopedia/clean_code/decomposi...
    Ответ написан
    2 комментария
  • Как распаковать вложенный список?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    from collections import abc
    
    def flatten(iterable):
        for item in iterable:
            if isinstance(item, (str, bytes)):
                yield item
            elif isinstance(item, abc.Sequence):
                yield from flatten(item)
            else:
                yield item
    
    
    data = ['Один',  'Два',  'Три',  ['Четыре',  'Пять',  'Шесть' ], 'Семь']
    
    flat_data = list(flatten(data))
    Ответ написан
    Комментировать
  • Как проще разпарсить email на Python?

    @javedimka
    Хочу сока
    Гуглится по запросу “Python poplib Unicode”:
    >>> from email.header import decode_header
    >>> s = '=?UTF-8?B?0KHQsdC10YDQsdCw0L3QuiDQntC90LvQsNC50L0uINCe0LTQvdC+0YDQsNC3?='
    >>> bytes, encoding = decode_header(s)[0]
    >>> bytes.decode(encoding)
    'Сбербанк Онлайн. Однораз'

    https://stackoverflow.com/questions/12527655/how-t...
    Ответ написан
    1 комментарий
  • Можно ли переопределять метод родителя с другим набором аргументов (Python 3)?

    @bromzh
    Drugs-driven development
    Если уж стоит такая острая необходимость, то используй *args и/или **kwargs в родителе:
    class A(object):
        def foo(self, *args, **kwargs):
            pass
    
    class B(A):
        def foo(self, a, b, c=42):
            pass
    Ответ написан
    1 комментарий
  • Можно использовать sqlite3 в асинхронном боте?

    @DollaR84
    Если ваша бд сильно нагружена, то действительно лучше использовать специализированные продукты типа postgres. Но в ином случае многие sqlite сильно недооценивают.
    Эта база может и простая, но имеет много возможностей, о которых большинство и не задумываются.
    Во первых, есть несколько вариантов указания работы с многопоточностью, указывается при сборке библиотеки, по умолчанию sqlite3.dll собрана с многопоточным доступом.
    https://www.sqlite.org/threadsafe.html
    Во вторых, у sqlite есть набор интересных ключей при открытии прагмы. Советую использовать, как минимум, journal_mode='wal'. Это освободит запросы чтения от ожидания завершения запросов записи.
    Также есть прагма threads, указывающая сколько лимитов потоков можно создавать, по умолчанию стоит 0, можно увеличить данное число.
    Со всеми прагмами можно ознакомиться тут: https://www.sqlite.org/pragma.html
    В третьих, если вы работаете с базой не напрямую запросами, а через какую-то ORM, то у них тоже могут быть дополнительные опции для потокобезопасности. Например, в простой ORM peewee при открытии базы, наряду с прагмами можно также указать флаг: thread_safe=True. Не разбирал подробности как он работает, но думаю он использует в своей работе ту же прагму threads.
    Поэтому все зависит от нагрузки и роли базы в ваших ботах. В некоторых задачах sqlite оправданный выбор. Надо подбирать инструмент под задачу.
    Ответ написан
  • Split строки и полученного массива на python?

    @dmtrrr
    Backend developer
    In [25]: s = 'BMW=X5,BMW=X1,Mercedes=G55,AUDI=A8,CHEVROLET=CRUZE'
    
    In [26]: dict([x.split("=") for x in s.split(",")])
    Out[26]: {'BMW': 'X1', 'Mercedes': 'G55', 'AUDI': 'A8', 'CHEVROLET': 'CRUZE'}
    Ответ написан
    1 комментарий
  • Bash scripts где смотреть исходники для практики?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Посмотрите скрипт автоматической установки OpenVPN - https://git.io/vpn
    Ответ написан
    4 комментария
  • PhpStorm 2 окна как в subime3?

    delphinpro
    @delphinpro Куратор тега PhpStorm
    frontend developer
    Правый клик по вкладке - Разделить окно по вертикали (или горизонтали)

    616434b5b3b94856580461.png
    Ответ написан
    1 комментарий
  • Как установить модули python без интернета и pip?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Kostyan4ik, почему это нет возможности? С питоном всегда можно найти какую-нибудь возможность.

    Вот, к примеру, вы можете на том компе, где есть питон и интернет, скачать все необходимые пакеты с помощью того же pip:
    pip download pip
    Так вы можете скачать все необходимые пакеты и принести их на машину без инета просто на флешке.
    А там:
    python pip-20.1.1-py2.py3-none-any.whl/pip install pip-20.1.1-py2.py3-none-any.whl

    Тут происходит маленькая магия: вы с помощью питона запускаете pip прямо изнутри локально лежащего файла с его дистрибутивом. Этим pip'ом вы ставите самого себя на локальную машину. Примерно как Барон Мюнхаузен, но не больно.

    Вы также можете сохранить перечень всех установленных пакетов на компе с инетом в текстовый файл, а потом, убрав из него лишнее, скачать все эти пакеты в локальный каталог, отнести на оффлайн-комп и там ставить через тот же pip
    pip freeze > r.txt
    pip download -r r.txt
    Ответ написан
    3 комментария
  • Метод list() в Python возвращает непустой список. Почему так?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Типичная ошибка, которая рассматривается в каждом учебнике по питону.
    Во-первых, list - это не метод, а тип, который инстанцируется в список, если его вызвать.
    Во-вторых, вот в этой строчке def __init__(self, elements=list()): создаётся список. Он создаётся оин единственный раз при объявлении класса. Значение этого списка будет присвоено аргументу elements по умолчанию при каждом вызове конструктора без указания этого аргумента.
    То есть один и тот же список будет сохранён в атрибутах всех объектов этого типа, которые были инстанцированы без указания параметра.
    У всесх ваших таких экземплярах внутри ссылка на один и тот же список. Если через одну ссылку в список добавить элеенты, то через другую ссылку доступен тот е самый список с уже добавленными элементами.
    Ответ написан
    Комментировать
  • Как сделать проверку на наличие определенного числа в базе данных (SQLite)?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вот набросал вам самый простой код, поиграйтесь с ним. Тут нет ничего сложного:
    import sqlite3
    
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    
    name = input('Введите имя пользователя: ')
    
    cursor.execute('SELECT status FROM Users WHERE username = ?',(name,))
    
    result = cursor.fetchone()[0]
    if result == 3:
    	print('Вы администратор')
    else:
    	print('Вы обычный пользователь')

    Структура базы:
    5f849558dd33d864306206.png

    PS:
    Как сделать чтобы в базе искалось все таблицы где в status указано 3.
    у вас несколько таблиц? Зачем?
    Ответ написан
    4 комментария
  • Альтернатива Excel для рисования таблиц?

    @Voland69
    gnuplot:
    есть обертка для python
    управляется командами - можно сделать все чего угодно
    можно выводить не на экран а в файл
    если подцепить python-docx то полученные картинки можно гнать сразу в документ

    если есть задача ко всему этому прикрутить GUI, то я бы предложил QML
    Ответ написан
    Комментировать
  • Альтернатива Excel для рисования таблиц?

    @rostislav-zp
    может не совсем по теме,но этот урок мне очень помог(Рисуем графики Highcharts (Highstock) по данным из MySQL ) unboxit.ru/blog/63-risuem-grafiki-highcharts-highs...
    а вообще еще это прочитайте
    https://habr.com/ru/post/246907/
    Ответ написан
    Комментировать
  • Можно ли использовать Raspberry Pi как небольшой домашний сервер для небольших задач?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Потянуть-то потянет, даже докер там развернёте. Но по памяти будет тесненько и ввод/вывод на флешку или что вы там подключите через USB будет довольно медленным.
    Но нафига вся эта машинерия - не ясно.
    Понятно, если бы мутили какой-нибудь умный дом и нужна локальная админка.
    Понятно, если на малинке поднять самопальный NAS (хотя медленный же...), понятно если торрентокачалку с DLNA, чтобы киношки через смарт-тв локально смотреть.

    Сервер на поиграться тоже можно, но сейчас VDS на лоу-костере обойдётся в 150-170р/мес (одно ядро, гиг оперативы и 20 гигов диска). При этом на ней белый айпишник, вы на ней поднимите в контейнерах VPN, телеграм-прокси, по ssh откуда угодно туда ходить можно и не возиться с NAT'ами домашнего провайдера.
    Занимаетесь вебом - иметь постоянную виртуалку для экспериментов, ИМХО, маст хев.
    Ответ написан
    Комментировать