Ответы пользователя по тегу Python
  • Как отправить несколько вопросов в f3.cool?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Тут вам не бесплатная фриланс-биржа для спамеров!
    Ответ написан
    Комментировать
  • Как сделать бота, который будет парсить с одного канала Telegram на другой канал?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Скорей всего вы взяли или собираетесь взять заказ на фрилансе. Сегодня видел такой заказ. За вас работу тут никто делать не будет.
    Ответ написан
  • Где взять список дней, недель, месяцев Python3?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Форматирование даты прописью на русском языке
    Не уверен, но посмотрите:
    Модуль calendar
    Многофункциональный велосипед:
    from datetime import datetime,timedelta,date
    
    days = {0: u"Понедельник", 1: u"Вторник", 2: u"Среда", 3: u"Четверг", 4: u"Пятница", 5: u"Суббота", 6: u"Воскресенье"}
    
    firstDate = '31122020'
    secondDate = '01012012'
    
    f_date = datetime.strptime(firstDate,'%d%m%Y').date()
    s_date = datetime.strptime(secondDate,'%d%m%Y').date()
    
    dates_2020 = []
    
    delta = timedelta(days=1)
    while s_date <= f_date:
    	s_date += delta
    	dates_2020.append(days[s_date.weekday()] + ':' + s_date.strftime('%m.%d'))
    
    for i in dates_2020:
    	print(i)

    Четверг:12.24
    Пятница:12.25
    Суббота:12.26
    Воскресенье:12.27
    Понедельник:12.28
    Вторник:12.29
    Среда:12.30
    Четверг:12.31
    Ответ написан
    3 комментария
  • Как правильно конвертировать русское время в datetime?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Немного переделал:
    from datetime import datetime
    
    RU_MONTH_VALUES = {
        'Январь': 1,
        'Февраль': 2,
        'Март': 3,
        'Апрель': 4,
        'Май': 5,
        'Июнь': 6,
        'Июль': 7,
        'Август': 8,
        'Сентябрь': 9,
        'Октябрь': 10,
        'Ноябрь': 11,
        'Декабрь': 12,
    }
    
    def int_value_from_ru_month(date_str):
        for k, v in RU_MONTH_VALUES.items():
            date_str = date_str.replace(k, str(v))
    
        return date_str
    
    
    date_str = int_value_from_ru_month('1 Декабрь 2019')
    print (date_str)
    
    d = datetime.strptime(date_str, '%d %m %Y')
    print(d)

    5e59a29437394339471282.png
    Оригинал

    Еще как вариант:
    pip3 install dateparser

    import dateparser
    
    ruDate = '1 Декабрь 2019'
    pyDate = dateparser.parse(ruDate)
    print(pyDate)
    Ответ написан
    Комментировать
  • Как решить эту проблему с модулем mega.py (пробовал другие, работают тоже криво)?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вот так попробуйте:
    from mega import Mega
    
    mega = Mega()
    m = mega.login('почта', 'пароль')
    details = m.get_user()
    
    print(details)
    Ответ написан
  • Что за ошибка? Как с ней бороться?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Произошла ошибка. Нет файла или папки. Без предоставления кода никто не скажет в чем проблема.
    Ответ написан
    Комментировать
  • Что написать на Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Как сгенерировать случайное число от 1.0 до 0.0 с разбегом в 0.1?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Еще как вариант:
    import random
    
    i = round(random.uniform(0.1, 1.0), 10)
    print("%.1f" % i)
    Ответ написан
    2 комментария
  • Аналог include(''); в Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import файл
    from файл import что-то
    from файл import * # Импорт всего - не рекомендуется.
    Ответ написан
    3 комментария
  • Бот выдает ошибку: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0). как исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1) Что должен делать код?
    2) bot.reply_to(message, 'something fails...') - не делайте так никогда, в смысле в разных участках кода выводить одну и ту же общую ошибку с одинаковым текстом. У вас в коде один текст для четырёх разных ошибок. И как гадать, когда в телегу пришло сообщение "something fails..." - из какого места в коде прилетела ошибка. Плюс, как мне кажется, не нужно обрабатывать все исключения одним кодом. Лучше написать обработчики для каждого возможного исключения, и выводить конкретный текст ошибки в случае определенного исключения, и при возможности как-то обрабатывать его.
    Ответ написан
  • Как "продолжить"?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Сначала вам нужно знать базовый синтаксис языка. Плюс несколько стандартных библиотек. Потом ищете простую идею для своей программы. Не нужно искать идеи в интернете или тут спрашивать. Напишите несколько программ для себя. Вот мой пример:
    1) Я заметил, что много времени провожу на qna.habr.com(количество переходов можно посмотреть в браузере). Так вот, я захожу на главную страницу сайта, и смотрю новые вопросы по моим тегам. Делаю это почти каждые 10-30 минут. Это здорово отнимает время. Решим проблему с помощью python. Взял 3 библиотеки(requests, notify2 и beautifulsoup) и написал простую программу. Суть ее в том, что она раз в минуту запрашивает главную страницу qna(с cookies), парсит ее и забирает из нее текст вопроса и ссылку. Потом проверяет в цикле, есть ли данная ссылка в файле. Если нет, значит показываем на рабочем столе уведомления с новыми вопросами, а ссылки записываем в файл. И так в цикле. Вроде бы программа простая, но с помощью нее можно поработать на практике с циклами, файлами, сетью, парсингом и т.д.
    Потом мне стало интересно, что такое боты в Телеграм. Почитал документацию и примеры. Вышеуказанною программу переделал под бота. Теперь уведомления приходят мне в телегу.
    2) Следующую программу сделал для rutracker.org Суть ее в следующем - указываем программе ссылку на раздел форума, она парсит сначала главную страницу раздела, вытаскивает номер последней страницы и потом скачивает и парсит с первой по последнюю страницу, вытаскивая заголовок раздачи, размер, сиды/пиры и записывает это все в базу sqlite3. Открываю базу с помощью sqlitebrowser, и могу искать раздачи по тексту, также сортируя по сидам, пирам, размеру и т.д Здесь опять можно потренироваться на практике с циклами, работой с сетью, парсингом, базой данных.

    Когда будете писать код, который вам интересен, вы и сами не заметите как, запомните синтаксис, часто используемые библиотеки и т.д.

    Пример бота для qna.habr.com:
    5e57a5a5d8f6b747820507.png
    Ответ написан
    Комментировать
  • Подробная документация по beautiful soup?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Почему бот выдает ошибку No such file or directory: 'temp/?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    В папке со скриптом создайте папку "temp".
    Ответ написан
  • Python(PyQt5) как сделать окна в окне?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Как создать бота для добавления надписей на фото?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Это самый простой код на 30 строчек в качестве примера!
    Скачиваете картинку 1.jpg Потом кидаете в папку со скриптом любой шрифт(желательно рукописный) "font.ttf"
    import telebot
    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    
    token = 'Здесь нужно вписать токен вашего бота'
    bot = telebot.TeleBot(token)
    
    def generate_doc(first_name, second_name):
    
    	img = Image.open('1.jpg')
    
    	font = ImageFont.truetype('font.ttf',30) # Загрузка шрифта и установка размера
    	font_color = (74,75,69) # Цвет шрифта
    	first_name_pos = (585,172) # Координаты первой буквы фамилии на картинке 1.jpg
    	second_name_pos = (505,205) # Координаты первой буквы имени
    
    	drawing = ImageDraw.Draw(img)
    	drawing.text(first_name_pos,first_name,font=font,fill=font_color)
    	drawing.text(second_name_pos,second_name,font=font,fill=font_color)
    
    	return img
    
    @bot.message_handler(content_types=['text'])
    def repeat_all_message(message):
    
    	string = message.text
    	s = string.split(' ')
    	if len(s) == 3:
    		image = generate_doc(s[0],s[1]+' '+s[2])
    		image.save('test.jpg')
    		bot.send_photo(message.chat.id,photo=open('test.jpg','rb'))
    	else:
    		bot.send_message(message.chat.id,'Ошибка! Введите имя, фамилию и отчество через пробел.')
    
    if __name__ == '__main__':
    	bot.polling(none_stop=True)

    5e5687658a1d7075945855.png
    Ответ написан
    5 комментариев
  • Как победить UnicodeDecodeError при чтении файла на pythone?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Midnight commander вам в помощь, открывает не открываемое.
    Ответ написан
    Комментировать
  • Как парсить элементы сайта, генерируемые Angular JS?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Может я не правильно понял вопрос, но текст песни забирается requests'стом с genius.com буквально в одну-две строчки.
    5e53c5b28e69f864577165.png
    Ответ написан
    2 комментария
  • Терминал выдает ошибку при запуске файла с ботом и некоректно работает погода. Сможете помочь?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Скорее всего bot = telebot.TeleBot(config.token)
    import telebot
    import pyowm
    
    owm = pyowm.OWM('key', language = "ru")
    bot = telebot.TeleBot('token')
    
    @bot.message_handler(content_types=['text'])
    def send_echo(message):
      try:
        observation = owm.weather_at_place( message.text )
        w = observation.get_weather()
        temp = w.get_temperature('celsius')["temp"]
        hum = w.get_humidity()
        time = w.get_reference_time(timeformat='iso')
        wind = w.get_wind()["speed"]
    
        answer ="В городе " + message.text + " сейчас " + w.get_detailed_status() + "\n"
        answer += "Температура сейчас в районе " + str(temp) + "\n\n" + "\nСкорость ветра: " + str(wind) + "м/с" + "\n" + "\nВлажность: " + str(hum) + "%" + "\n" + "\nВремя: " + str(time) + "\n"
    
        if temp < 11:
          answer += "Сейчас очень холодно."
        elif temp < 20:
          answer += "Сейчас прохладно, лучше одеться потеплее."
        else:
          answer += "Температура в норме!"
    
        bot.send_message(message.chat.id, answer)
      except pyowm.exceptions.api_response_error.NotFoundError:
        bot.send_message(message.chat.id,'Ошибка! Город не найден.')
      except pyowm.exceptions.api_response_error.UnauthorizedError:
      	print('Не верный ключ pyowm!')
    
    bot.polling( none_stop = True)
    input()

    5e51c6541e19e731240098.png
    Ответ написан
  • Почему не подключаются модули в pip?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Когда вы выполняете команду pip install example, вы устанавливаете пакет из репозитория pypi.org.
    В вашем же случае нужно - pip install ./dist/ProjectName.tar.gz
    Ответ написан
    1 комментарий
  • Парсинг на python. Как исправить работу пагинации?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Не ту ссылку используете. Нужно эту - "www.yoox.com/RU/shoponline?dept=clothingmen&gender=U&page={x}&season=X&clientabt=SmsMultiChannel_ON%2CSrRecommendations_ON%2CNewDelivery_ON%2CRecentlyViewed_ON%2CmyooxNew_ON"

    В коде ниже страницы парсятся по очереди и сразу результат заносится в файл. В файл записываются только результаты со скидками!
    Вот рабочий код, может кому пригодится:
    import requests
    from bs4 import BeautifulSoup
    from lxml import html
    import csv
    
    url = 'https://www.yoox.com/ru/%D0%B4%D0%BB%D1%8F%20%D0%BC%D1%83%D0%B6%D1%87%D0%B8%D0%BD/%D0%BE%D0%B4%D0%B5%D0%B6%D0%B4%D0%B0/shoponline#/dept=clothingmen&gender=U&page=1&season=X'
    
    headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    
    def getClothes(url,page_id):
    	clothes = []
    	respones = requests.get(url,headers=headers)
    	soup = BeautifulSoup(respones.text,'lxml')
    
    	mainContent = soup.find('div',id=f'srpage{page_id}')
    	products = mainContent.find_all('div',class_='col-8-24')
    
    	for product in products:
    
    		brand = product.find('div',class_='itemContainer')['data-brand'] # Бренд
    		cod10 = product.find('div',class_='itemContainer')['data-current-cod10'] # Для формирования ссылки yoox.com/ru/{cod10}/item
    		category = product.find('div',class_='itemContainer')['data-category']	# Категория
    		oldPrice = product.find('span',class_='oldprice text-linethrough text-light') # Старая цена (может не быть)
    		newPrice = product.find('span',class_='newprice font-bold') # Новая цена (может не быть)
    		
    		if oldPrice is not None:
    			# Данный код выполняется только, если на товар есть скидка
    			sizes = product.find_all('div',class_='size text-light')
    			str_sizes = ''
    
    			for x in sizes:
    				str_sizes += x.text.strip().replace('\n',';')
    			clothes.append({'art':cod10,
    							'brand':brand,
    							'category':category,
    							'url':f'https://yoox.com/ru/{cod10}/item',
    							'oldPrice':oldPrice.text,
    							'newPrice':newPrice.text,
    							'sizes':str_sizes
    							})
    	return clothes
    
    
    def getLastPage(url):
    	respones = requests.get(url,headers=headers)
    	soup = BeautifulSoup(respones.text,'lxml')
    	id = soup.find_all('li', class_ = 'text-light')[2]
    	
    	return int(id.a['data-total-page']) + 1
    
    def writeCsvHeader():
    	with open('yoox_man_clothes.csv', 'a', newline='') as file:
    		a_pen = csv.writer(file)
    		a_pen.writerow(('Артикул', 'Ссылка', 'Размеры', 'Бренд', 'Категория', 'Старая цена', 'Новая цена'))	
    
    def files_writer(clothes):
    	with open('yoox_man_clothes.csv', 'a', newline='') as file:
    		a_pen = csv.writer(file)
    		for clothe in clothes:
    			a_pen.writerow((clothe['art'], clothe['url'], clothe['sizes'], clothe['brand'], clothe['category'], clothe['oldPrice'], clothe['newPrice']))
    
    
    if __name__ == '__main__':
    	writeCsvHeader() # Запись заголовка в csv файл
    	lastPage = getLastPage(url) # Получаем последнею страницу
    	for x in range(1,lastPage): # Вместо 1 и lastPage можно указать диапазон страниц. Не начинайте парсить с нулевой страницы!
    		print(f'Скачавается: {x} из {lastPage-1}')
    		url = f'https://www.yoox.com/RU/shoponline?dept=clothingmen&gender=U&page={x}&season=X&clientabt=SmsMultiChannel_ON%2CSrRecommendations_ON%2CNewDelivery_ON%2CRecentlyViewed_ON%2CmyooxNew_ON'
    		files_writer(getClothes(url,x)) # Парсим и одновременно заносим данные в csv

    5e4ffa5e16614949170016.png
    Ответ написан
    3 комментария