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

    @PavelMos
    https://habr.com/ru/company/ruvds/blog/648237/
    задать дату через datetime.datetime с текущим годом и каким-нибудь временем,
    потом вычитать из него текущее время.
    datetime.datetime.now(), потом от результата брать .days
    dr = datetime.datetime(datetime.datetime.now().year,9,9,11,59) #текущий год
    today = datetime.datetime.now()
    d = dr-today
    print (f'разница {d.days} дней')
    разница 8 дней
    Ответ написан
  • Как парсить истории продаж скина в стим?

    @PavelMos
    Там есть вообще все значения в т.ч. за более ранние периоды.
    Я сделал так
    req1=request...
    soup1=bs(req1.content, 'html.parser')
    result1=re.findall(re.compile(r'line1=(.*)]];'), str(soup1) ) [0] #у меня получился result1=список из одного элемента
    list1=result1.split('],[')
    out1
    Out[133]: 
    ['[["Dec 09 2015 01: +0",7.989,"44"',
     '"Dec 10 2015 01: +0",5.743,"66"',
     '"Dec 11 2015 01: +0",5.277,"73"',
     '"Dec 12 2015 01: +0",5.262,"89"',
     '"Dec 13 2015 01: +0",4.953,"66"',
     '"Dec 14 2015 01: +0",4.65,"80"',
     '"Dec 15 2015 01: +0",6.189,"67"',
     '"Dec 16 2015 01: +0",4.673,"53"',
     '"Dec 17 2015 01: +0",4.55,"44"',
     '"Dec 18 2015 01: +0",4.458,"53"',
     '"Dec 19 2015 01: +0",4.419,"61"',
    .....
     '"Aug 30 2022 07: +0",1.709,"2"',
     '"Aug 30 2022 09: +0",1.67,"1"',
     '"Aug 30 2022 10: +0",0.203,"1"',
     '"Aug 30 2022 12: +0",1.748,"1"',
     '"Aug 30 2022 13: +0",1.75,"2"',
     '"Aug 30 2022 14: +0",1.708,"2"',
     '"Aug 30 2022 18: +0",1.1,"2"',
     '"Aug 30 2022 20: +0",1.776,"1"',
     '"Aug 30 2022 21: +0",1.745,"2"',
     '"Aug 30 2022 22: +0",1.61,"1"',
     '"Aug 30 2022 23: +0",1.847,"1"',
     '"Aug 31 2022 02: +0",1.63,"1"',
     '"Aug 31 2022 03: +0",1.82,"2"',
     '"Aug 31 2022 04: +0",1.58,"1"',
     '"Aug 31 2022 06: +0",1.58,"1"',
     '"Aug 31 2022 10: +0",1.24,"1"',
     '"Aug 31 2022 11: +0",1.897,"1"',
     '"Aug 31 2022 13: +0",1.58,"1"',
     '"Aug 31 2022 14: +0",1.854,"2"',
     '"Aug 31 2022 15: +0",1.41,"1"']
    len(out1)
    Out[134]: 2816
    Ответ написан
    1 комментарий
  • Как проверить количество цифер после точки во float в Python?

    @PavelMos
    А прикинуть, как бы число цифр после десятичной точки считал человек, по какому алгоритму ?
    Флоат это число с точкой. Значит, можно перевести в строку str, разбить по точке split и взять из результирующего списка длину второй (правой) части.

    len ( str('1.12345').split('.')[1] )
    Ответ написан
    Комментировать
  • Не выводит данные с пост запроса. Как решить?

    @PavelMos
    Всё нормально. Так настроен сервер. А реквестс это же не браузер, он не будет сам следовать в случае успешного логина редиректу на например страницу пользователя.
    In[4]: response = session.post('https://edu.tatar.ru/logon', data=data, headers=headers)
    In[5]: response
    Out[5]: <Response [200]>
    Ответ написан
  • Состоит список только лишь из единиц, или нет?

    @PavelMos
    Надо по скорости смотреть, что быстрее
    можно попробовать через set это набор только уникальных значений, однако предполагается, что как минимум одна единица там должна быть - в условии сказано, что единиц большинство
    res=True if len (set (arr) )==1 else False
    скорость вариантов можно мерить, делая print t1=(datetime.datetime.now()) до и t2=datetime.datetime.now() после и потом print (t2-t1)
    datetime модуль должен быть по умолчанию вроде установлен
    Ответ написан
  • Как решить: AttributeError: 'NoneType' object has no attribute 'vk_id'?

    @PavelMos
    Надо смотреть что создаётся user = utils.get_user_by_id(user_id)

    И еще обращение к fwd_user
    user_name = self.vk_session.method('users.get', {'user_id': fwd_user.vk_id})

    а перед эти fwd_user везде закомментирован
    Ответ написан
  • Как вывести ссылки на криптовалюту?

    @PavelMos
    response = requests.get("https://minfin.com.ua/currency/crypto/")
    html = response.text
    
    soup = BeautifulSoup(html, "lxml")
    
    r2=re.compile('sc-18qu8it')
    #find_name_href = soup.find_all(class_="sc-18qu8it-11 hZgTBs")
    find_name_href=soup.find_all('a',{'class':r2})
    pprint.pprint((find_name_href))
    print ('/r/n')
    for i in find_name_href:
        j=i.get('href')
        print (j)


    /currency/crypto/bitcoin/
    /currency/crypto/ethereum/
    /currency/crypto/tether/
    /currency/crypto/usd-coin/
    /currency/crypto/binancecoin/
    /currency/crypto/binance-usd/
    /currency/crypto/ripple/
    /currency/crypto/cardano/
    /currency/crypto/solana/
    /currency/crypto/dogecoin/
    /currency/crypto/polkadot/
    /currency/crypto/shiba-inu/
    /currency/crypto/dai/
    /currency/crypto/staked-ether/
    /currency/crypto/matic-network/
    /currency/crypto/tron/
    /currency/crypto/avalanche-2/
    /currency/crypto/wrapped-bitcoin/
    /currency/crypto/leo-token/
    /currency/crypto/ethereum-classic/
    /currency/crypto/okb/
    /currency/crypto/litecoin/
    /currency/crypto/ftx-token/
    /currency/crypto/cosmos/
    /currency/crypto/crypto-com-chain/
    /currency/crypto/chainlink/
    /currency/crypto/near/
    /currency/crypto/uniswap/
    /currency/crypto/monero/
    /currency/crypto/stellar/
    /currency/crypto/bitcoin-cash/
    /currency/crypto/algorand/
    /currency/crypto/chain-2/
    /currency/crypto/flow/
    /currency/crypto/vechain/
    /currency/crypto/internet-computer/
    /currency/crypto/filecoin/
    /currency/crypto/frax/
    /currency/crypto/apecoin/
    /currency/crypto/hedera-hashgraph/
    /currency/crypto/eos/
    /currency/crypto/the-sandbox/
    /currency/crypto/decentraland/
    /currency/crypto/tezos/
    /currency/crypto/quant-network/
    /currency/crypto/axie-infinity/
    /currency/crypto/elrond-erd-2/
    /currency/crypto/theta-token/
    /currency/crypto/aave/
    /currency/crypto/chiliz/
    Ответ написан
    Комментировать
  • Как получить ссылки на проекты википедии?

    @PavelMos
    У таблицы ссылок с проектами есть же уникальный аттрибут summary

    project1=soup.find('table', summary='Краткое описание других проектов Фонда Викимедиа и ссылки на них')
    project1
    Out[14]: 
    <table align="center" cellspacing="2" class="plainlinks" style="text-align:left; width:90%; background:transparent; line-height:1.25em" summary="Краткое описание других проектов Фонда Викимедиа и ссылки на них">
    <tbody><tr>
    <td style="text-align:center; width:50px"><a href="//wikipedia.org"><img alt="Wikipedia-logo.png" data-file-height="200" data-file-width="200" decoding="async" height="20" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/63/Wikipedia-logo.png/20px-Wikipedia-logo.png" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/63/Wikipedia-logo.png/30px-Wikipedia-logo.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/63/Wikipedia-logo.png/40px-Wikipedia-logo.png 2x" width="20"/></a>
    ....

    а потом
    p2=project1.find_all(href=re.compile('https:\/\/')) 
    for i in p2: print (i.get('href'))
    https://wikipedia.org
    https://commons.wikimedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0?uselang=ru
    https://www.wikidata.org/wiki/Wikidata:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0
    https://meta.wikimedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0?uselang=ru
    https://wikisource.org
    https://wikibooks.org
    https://wikiquote.org
    https://incubator.wikimedia.org/wiki/Incubator:Main_Page/ru?uselang=ru
    https://wikinews.org
    https://wikivoyage.org
    https://species.wikimedia.org/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0?uselang=ru
    https://mediawiki.org/wiki/MediaWiki/ru?uselang=ru
    https://wiktionary.org
    https://wikiversity.org
    Ответ написан
    Комментировать
  • Как из текстового файла достать строки в определённом диапазоне?

    @PavelMos
    Можно cэкономить и
    1) читать только до правой границы диапазона, например, до строки с индексом 6 (считая от нуля)
    2) записывать только строки, входящие в диапазон (например, от 3 до 6, начиная с 0)
    with open (fname, 'r', encoding='utf') as f:
        res=[]
        c=0
        for i in range (0,7) : #до правой границы, не включая 7
            r=f.readline()
            if c in range (3,7): # от левой границы, включая 3, до правой, не включая 7
                res+=[r]
            c+=1
    Ответ написан
    Комментировать
  • Python3 декодирование/чтение Dat файла. Как определить кодировку файла?

    @PavelMos
    Тут имхо сразу понятно, что это не текст в кодировке.
    Но вообще выяснение кодировки текстового файла это перебор по списку кодировок или использование модулей, которые, однако, всё равно определяют не точную кодировку, а наиболее вероятную.
    Когда искал ответ на этот вопрос, тут
    https://stackoverflow.com/questions/436220/how-to-...
    нашёл chardet
    https://pypi.org/project/chardet/
    Ответ написан
    Комментировать
  • Как найти ближайшее меньшее к моему числу из заданных чисел?

    @PavelMos
    Самое простое
    1. Отсортировать по возрастанию
    2. Перебрать циклом сравнение и остановиться, когда будет найдено первое бОльшее число, и взять предыдущее (и нужна проверка, чтобы не сработало на нулевом элементе)
    x = [2**0, 2**1, 2**2, 2**3, 2**4, 2**5, 2**6, 2**7, 2**8, 2**9, 2**10]
    for i in range (0,len(x)): 
        if x[i]>y:
            print (x[i-1],y)
            break
    Ответ написан
    3 комментария
  • Как записать файл в папке?

    @PavelMos
    1. \папка\user_file это относительный путь, и он подойдет только для случая, если скрипт запускается из той же директории, где находится директория папка. Если нет, пусть надо изменить.
    2. w+ перезапишет старый файл, если файл с таким название существует.
    Ответ написан
  • Как сделать задержку на открытию ссылки в python?

    @PavelMos
    import time
    print ('xxxx')
    time.sleep(3) #секунды
    print ('yyyy')

    Такое ?
    Ответ написан
    Комментировать
  • Как сделать вывод определённого количества столбцов?

    @PavelMos
    Сделать дополнительный столбец Page
    И заполнить его в зависимости от номера id. Формула для страницы:
    начало промежутка 1+(стараница-1)*5
    конец промежутка 5*страница

    Или сразу создать последовательность [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3....] и вставить в столбец , если известно, что id подряд идут без разрывов, или по по промежуткам:
    for page in range (1,10, 5) : # от 1 до 10 страниц, шаг 5
    cur.execute ("UPDATE table1 SET page=? IF (id>=? AND id<=?);", (page, 1+(page-1)*5, page*5))
    Ответ написан
  • Как сделать мультиязычность в телеграм боте aiogram?

    @PavelMos
    Вместо переменных с сообщениями, или вместо текста сообщений создать словарь с тремя вложенными словарями и каждому сообщению обращаться как к элементу словаря, точнее, одного из трёх вложенных словарей

    d={'ru':{"yes":"да","no":"нет"....,
         'ua':{....
          'en':{...
    }

    после того, как в программе будет выбран нужный язык, переменная lang будет устанолена в ru, ua, en.
    и текст сообщения в программе будет
    message_yes=d[lang]['yes']
    message_no=d[lang]['no']
    Ответ написан
  • Как подключить прокси в session request?

    @PavelMos
    get_session только объявлена, причём внутри цикла.
    Ответ написан
  • Ошибка table hod has 4 columns but 3 values were supplied?

    @PavelMos
    В таблице hod точно 3 колонки ? Это можно посмотреть через select * from hod или через какой-нибудь SQL менеджер
    CREAT IF NOT EXIST с тремя колонками создаёт таблицу если её нет. Если по какой-то причине была создана ранее и там 4 колонки, то она так и останется
    Ответ написан
  • При парсинге таблицы выдает ошибку 'NoneType' object has no attribute 'find'. Как решить?

    @PavelMos
    rows = soup.find('table',class_ ='betinfo2').find('tbody').find_all('tr')

    В питоне всё - объекты, и результаты функций возвращают объекты, к которым, как тут, последовательно применяются другие функции (в данном случае это встроенные функции объекта BS).
    find_all применяется к тому, что было получено в find('tbody'), примененному к soup.find и тд. Но из-за того ,что на предыдущем шаге ничего не нашлось, функция вернула NoneType. К которому нельзя применять find_all, рассчитанный на работу с объектом BS.
    Ответ написан
  • Как сделать ограничения в бд?

    @PavelMos
    Такие вещи делают обычно в скриптах, которые работают с базой. Т.е. сам скрипт перед записью проверяет условие и добавляет запись или сообщает об ошибке
    Ответ написан
    Комментировать
  • Нужно спарсить номера телефонов, но они появляются полсе нажатии на кнопку, как их спарсить?

    @PavelMos
    from selenium import webdriver
    import selenium
    import time
    
    driver=webdriver.Chrome('C:\\inst\\chromedriver_win32\\chromedriver.exe')
    page2='https://____.ru/gde_kupit_kvartiru/agentstva_nedvizhimosti?page=1'
    
    driver.get(page2)
    time.sleep(3)
    driver.find_element(selenium.webdriver.common.by.By.XPATH,
                        f'//*[@class="show-"]').click()
    time.sleep(4) #я задержку ставил на всякий случай, возможно, сработает и без неё, если там совсем никто с парсерами не борется
    try:
        a=driver.find_element(selenium.webdriver.common.by.By.XPATH,
                        f'//li[contains(@class, "phone-")]').text
        print ('a=', a)
    except Exception:
        print (Exception)
    try:
        b=driver.find_element(selenium.webdriver.common.by.By.XPATH,
                        f'//a[contains(@href, "tel:+")]').text
        print ('b=', b)
    except Exception:
        print (Exception)

    C:\Python36\python.exe C:/py/selen1.py
    a= +7 (926) 626-28-66
    b= +7 (926) 626-28-66

    Возможно, имея список фирм с их id типа ".../phones?company=14402101" можно по этим номерам перебрать
    Еще имхо надо потом удалить из вопроса url сайта а то вдруг найдут и поставят защиту, хотя сайт явно не такой продвинутый в этом плане как крупные.
    Ответ написан
    1 комментарий