Ответы пользователя по тегу Python
  • Как получить данне с сайта с помощью BeautifulSoup?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ответ


    data = '''
    <div class="catalog-grid catalog-grid_unpadding-mobile catalog-grid_by3 rightside ">
                    <div class="catalog-grid__item"><article class="product-snippet"itemscope itemprop="itemListElement" itemtype="http://schema.org/Product" >
        <button class="product-snippet__favorite product-card__favorite product-card__favorite"
                data-id="124852">
    
            <span>
    <svg width="24" height="24">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#heart"></use>
    </svg>
    </span>        <span class="product-card__favorite_bin">
    <svg width="24" height="24">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#bin"></use>
    </svg>
    </span>    </button>
    
        <!-- TOP PART -->
        <div class="product-snippet__top">
    
            <div class="product-snippet__right">
                <meta itemprop="sku" content="124852">                            <span itemprop="brand" itemscope itemtype="http://schema.org/Brand">
                        <meta itemprop="name" content="Colterenzio">                </span>
    
                <!-- ID -->
                <div class="product-snippet__id" data-value-group-id="132655"
                     data-value-id="108038">
                    <span>Артикул:</span>
                    124852            </div>
                <!-- #ID -->
                <!-- RATINGS -->
            <div class="product-snippet__ratings">
            <!-- STARS -->
                        <div class="product-snippet__ratings-item">
    
    <svg width="12" height="12">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#star"></use>
    </svg>
                    <span>4.8</span>
                </div>
    
    
                    <!-- #STARS -->
    
            <!-- GREEN SELECTIONS -->
                    <!-- #GREEN SELECTIONS -->
    
    
                </div>
    <!-- #RATINGS -->
    
                <!-- NAME -->
                <a href="/catalog/product/colterenzio_pfefferer_2020_075/"
                   data-page="1"
                   data-value-group-id="132655"
                   data-value-id="108038"
                   class="product-snippet__name js-dy-slot-click">
                    Вино Pfefferer, Colterenzio, 2020&nbsp;г.            </a>
                <meta itemprop="name" content="Вино Pfefferer, Colterenzio, 2020&nbsp;г.">            <!-- #NAME -->
                                <!-- DESC -->
                    <div class="product-snippet__desc">
                        <a href="/catalog/vino/filter/country-italiya/">Италия</a>, <a href="/catalog/vino/filter/color-beloe/">белое</a>, <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>, <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>                </div>
                    <!-- #DESC -->
                            <!-- DETAIL -->
                <div class="product-snippet__detail">
    
    
                                        <div class="tag-stock product-snippet__stock-part">
                            <div class="tag-stock__buy-price-sale-link">
                                <div class="tag-stock__icon-wrap">
                                    <span class="tag-stock__buy-price-sale-icon">
    <svg width="19" height="19">
        <use xlink:href="/static/local/assets/sprite.svg?v=4#sale"></use>
    </svg>
    </span>                                <div class="tag-stock__alert">
                                                                            <div class="tag-stock__alert-title">Вы обратились по адресу: у нас такого много</div>
                                        <p class="tag-stock__alert-descr">
                                                                                </p>
                                                                                <div class="tag-stock__alert-link-wrap">
                                                <a class="tag-stock__alert-link" href="/stock/vy-obratilis-po-adresu-u-nas-takogo-mnogo/"
                                                    >
                                                    Подробнее</a>
                                            </div>
                                                                        </div>
                                </div>
                                <span class="tag-stock__buy-price-sale-text">Участвует в акции</span>
                            </div>
                        </div>
    
    
                                        <!-- INFO -->
                        <div class="product-snippet__info">
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Страна:</span>
    
                                                                                                        <a href="/catalog/vino/filter/country-italiya/">Италия</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Цвет:</span>
    
                                                                                                        <a href="/catalog/vino/filter/color-beloe/">белое</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Сахар:</span>
    
                                                                                                        <a href="/catalog/vino/filter/sugar_type-polusukhoe/">полусухое</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Объем:</span>
    
                                                                                                        <a href="/catalog/vino/filter/volume-0_75/">0.75&nbsp;л.</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Виноград:</span>
    
                                                                    <a href="/catalog/vino/filter/grape-muskat_zheltyy/">мускат желтый 100%</a>                                                            </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Производитель:</span>
    
                                                                                                        <a href="/catalog/vino/filter/manufacturer-colterenzio/">Colterenzio</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Регион:</span>
    
                                                                                                        <a href="/catalog/vino/filter/region-trentino_alto_adidzhe/">Трентино-Альто Адидже</a>
                                                                </div>
                                                        <div class="product-snippet__info-item">
                                    <span class="product-snippet__info-title">Стилистика:</span>
    
                                                                                                        белое - яркое, из ароматических сортов винограда                                                            </div>
                                                </div>

    '''
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(data, 'html5lib')
    product_data = soup.find(class_="product-snippet__info") #  выбрал этот класс, так как именно в нём отображена модель объекта - это видно глазами. 
    #  там внутри однотипные элементы, и их будем далее перебирать. 
    
    title = []
    for number, item in enumerate(product_data): #  тут enumerate не обязательно, я его поместил, чтобы когда буду разбираться, смотреть, к какому полю из полей product_data по номеру обращается скрипт. Можно убрать number и enumerate. 
        product_tds = item.find("a") #  нахожу следующий тег <a>
        if hasattr(product_tds, 'text'): #  среди найденных объектов у некоторых есть атрибут «text», у других его нет. Где его нет - пропускаем, где есть - складываем в список
            title.append(product_tds.text)
    print(' '.join(title)) #  печатаем найденные и сложенные в список title тексты через пробел.


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

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    import random
    
    def get_random_int():
        return random.randint(5, 10)
    
    
    def get_random_a_b():
        return get_random_int(), get_random_int()
    
    
    a, b = get_random_a_b()
    while True:
        if a > b:
            result = a - b
            sign = '-'
        else:
            result = a + b
            sign = '+'
        sent = '\n'.join(['', str(a), sign, str(b), 'Ваш ответ: '])
        if int(input(sent)) == result:
            print("Правильно!")
        else:
            print(f"Ошибка! Правильный ответ: {result}")
        a, b = get_random_a_b()
    Ответ написан
    Комментировать
  • Как правильно спарсить шаблон?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Нагляднее так:
    from datetime import datetime
    
    now = datetime.now()
    prefix = 'error'
    error = 'сама ошибка'
    error_time = now.strftime("%d.%m.%Y, %H:%M:%S")
    entry = f'[{prefix}] {error_time}: {error}'
    
    print(entry)
    Ответ написан
    Комментировать
  • Почему не работает цикл while в python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому что True это 1, а не 10. Но приведение 10 к булеву значению даст 1.
    i = 10
    while bool(i) == True:
        print(i)

    Во втором варианте оно неявно приводится интерпретатором, поскольку while принимает на вход только булево значение.
    Ответ написан
    2 комментария
  • Где тут лишние табы/пробелы, или что это за ошибка?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Нельзя одновременно использовать табы и пробелы. Где они - он же пишет тебе, в 14 строке. И кстати ещё в 8-й.
    Ответ написан
    2 комментария
  • Как заставить рисовать PyGame линиями, вместо точек?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Посмотри, я когда-то ковырялся в этом деле, код по ссылке.
    Ответ написан
    8 комментариев
  • Можно ли с помощью библиотеки vidstream общаться с разных ПК и вне локальной сети?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Следующие слова
    Under construction! Not ready for use yet!
    на github намекают, что скорее всего нельзя.
    Ответ написан
  • Как убрать форматирование запроса MySQL?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Почитайте о словарях в python.
    Ответ написан
    Комментировать
  • Как изменить путь открытия текстового файла, когда указываешь только название?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я обычно пользуюсь библиотекой pathlib - там есть Path()
    Дальше делаем что-то вроде:
    my_root = Path.cwd()  # cwd - current work dir
    my_file = Path(“my_file_name.txt”)
    my_file_full_path = my_root / myfile

    P.s. Можно pathlib2, но там есть нюансы. Для большинства случаев достаточно pathlib.
    P.p.s. Если таки нужно будет папку %UserProfile%, используй Path.home()
    Ответ написан
  • Как редактировать записи в sqlite через python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Правильно ли я понимаю, у вас плоская таблица Пользователи, где каждому пользователю соответствует строка, у каждого пользователя есть атрибуты (колонки) user_name, user_id, Имя, Номер_телефона

    Тогда в строке
    db.execute("INSERT INTO Пользователи (Номер_телефона) VALUES (?)",
              (message.text))
    вы пытаетесь добавить строку, но надо делать update уже ранее созданной строки, аналогично с update из предыдущего ветвления.
    Фактически, вам надо оставить одну строку с update уже после всех if/elif, где вы выясняете за номер телефона, и передавать в эту строку полученное значение номера телефона (получено оно из телеграм или от пользователя - не важно).
    Ответ написан
  • Ошибка чтения файла на пайтон. Как исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Полагаю, дело в том, что в файле - строка или строки. Они содержат кроме собственно цифр ещё другие символы - пробелы, концы строки, переводы каретки, конец файла и т.п.

    Конечно, можно добиться, чтобы работало именно так, как вы делаете.

    Но судя по всему, вы изобретаете велосипед на костылях.

    Вам ведь надо хранить в файле некоторые данные - например, значение параметра.
    Для этого придумали форматы - например, JSON, XML, YAML, CSV и т.п.

    Частенько используют JSON - для него в Python есть встроенная библиотечка, он хорошо описан и более чем гибок для любых ваших потребностей. Попробуйте освоить.
    Ответ написан
    Комментировать
  • Возможно ли сделать чтобы бот discord.py отвечал на сообщение любыми способами?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Рекомендую применить метод .lower() - сравнивать два строковых объекта с примененным к ним этим методом.
    print("привет".lower() == "пРиВЕт".lower())
    Ответ написан
    Комментировать
  • Ошибка в pycharm _ctypes.COMError: (-2147200967, None, (None, None, None, 0, None))?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Pycharm тут ни при чём.
    Лучше посмотрите, какие версии python поддерживает pyttsx3 - максимум 3.7; а у вас какая? Попробуйте версию 3.7 - должно заработать.
    Ответ написан
    Комментировать
  • TypeError: 'NoneType' object cannot be interpreted as an integer как исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Я думаю, что os.startfile(r'звуки\крик.mp3') возвращает None, соответственно в переменной krik содержится None, соответственно когда это None попадает на вход os.close(), вы получаете ошибку.

    Я бы рекомендовал вам во-первых изучить объектную модель языка python, чтобы осознавать, что именно вы делаете. Во-вторых, изучить документацию, касающуюся используемых библиотек и методов. В общем, это легко сделать, выполнив команду help(os.startfile)
    и
    help(os.close)
    В частности, метод os.close() требует на вход file descriptor, т.е. число, int. Значит, надо получить дескриптор и скормить его методу.

    P.s. Ну, кстати, как указал уважаемый Vindicar os.close не закрывает запущенный процесс. Это надо копать в сторону команды kill, я так думаю.
    Ответ написан
    2 комментария
  • Знатоки Selenium - где найти аргументы для webdriver.execute_script()? Какие скрипты можно запускать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Посмотрите тут
    Ответ написан
    Комментировать
  • Не записывает или неправильно вывожу массив в python 3.9.1?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Почитайте про области видимости (пространства имён).
    У вас есть два списка iGetDay. Один - в глобальном пространстве имён модуля, другой - в локальном пространстве функции dow.
    Это разные объекты, никак друг с другом не связанные.
    Вам лучше возвращать значение из функции при помощи return и результат выполнения функции связывать с глобальным именем вне функции.
    И все значения явно передавать в функции как параметры функции и получать из функции как return. И не полагаться на области видимости, они неявные и в них легко запутаться.
    Ответ написан
    Комментировать
  • Как получить (резолвить) группу контактов из Outlook при отправке сообщений через MAPI?

    phaggi
    @phaggi Автор вопроса, куратор тега Python
    лужу, паяю, ЭВМы починяю
    Благодаря подсказке Viktor T2 доковырялся-таки до списков рассылки (тип DistListItem) и нашел в документации MS методы и поля этого класса. Ура!
    код
    import win32com.client as win32
    from win32com.client.gencache import EnsureDispatch
     
     
     
     
    def get_maillist(maillistname: str):
        """
     
        :param maillistname: str name of Group contacts at Outlook
        :return: string of addresses (del = ;) of Group contacts
        (empty if Group 'maillistname' not found)
        """
        outlook = EnsureDispatch("Outlook.Application")
        olNamespace = outlook.GetNamespace("MAPI")
        olFolder = olNamespace.GetDefaultFolder(10)
        olConItems = olFolder.Items
        mail_list = []
        for olItem in olConItems:
            if "_DistListItem" in str(type(olItem)) and olItem.DLName == maillistname:
                counter = olItem.MemberCount
                while bool(counter):
                    mail_list.append(olItem.GetMember(counter).Address)
                    counter -= 1
        if bool(mail_list):
            result = ';'.join(mail_list)
        else:
            result = ''
        return result
     
    if __name__ == '__main__':
        outlook = win32.Dispatch('outlook.application')
        mail = outlook.CreateItem(0)
        mail.To = get_maillist('test1')
        mail.Subject = 'testmail'
        print(mail.Recipients.ResolveAll())
        print(mail.To)
        mail.Send()
    Ответ написан
    Комментировать
  • Как изменить переменную в бд, при условии наличия нужного параметра из того-же бд?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    То, что вы указали как 0.010, является не переменной в бд, а значением. Переменные в бд - это совсем другое.
    Поэтому формально ответа на вопрос «как» нет.

    Что касается «при на ходе у юзера разрешения» - я так понимаю, в бд за это отвечают поля booster - надо либо сделать на каждый вариант новую строку update с другими параметрами логики where, которые и проверяют значения полей booster, либо делать логику в самой программе, чтобы она считывала значения booster, осмысливала и формировала нужную строку update для базы. Всё просто.
    Ответ написан
    Комментировать
  • Почему при объединении двух датафреймов с помощью .merge в pandas datetime index меняются на обычные?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Попробуйте поиграться с параметрами индексов
    pd.merge(df1, df2, left_index=True, right_index=True)
    Ответ написан
    Комментировать