• Не работает wifi после установки минта?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Если ноутбук, можно посмотреть, не выключен ли wifi с помощью клавиш "Fn+клавиша с антенкой"?
    Также можно попробовать загрузится с любого livecd...
    Ответ написан
    Комментировать
  • Как "продолжить"?

    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 комментариев
  • Как можно при выводе логов преобразовать timestamp в читаемый формат?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Можно сделать на python:
    from datetime import datetime
    
    ts = 1582360680203/1000
    print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
    #2020-02-22 08:38:00
    Ответ написан
    Комментировать
  • Как победить UnicodeDecodeError при чтении файла на pythone?

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

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

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

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Используйте Visual Studio Code.
    Ответ написан
    3 комментария
  • Как сделать панель меню visual sudio code в ubuntu менее заметной?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Settings -> в строке поиска пишете "menu bar" -> Window -> "Window:Title Bar Style" в значение custom.
    5e52b51c822df586934992.png
    Ответ написан
    Комментировать
  • Как вызвать установленный пакет?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Попробуйте так:
    nodejs -v
    Если заработает, тогда:
    sudo ln -s /usr/bin/nodejs /usr/bin/node
    Ответ написан
    Комментировать
  • Как изменить интерфейс?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Конечно можно. Распакуйте ресурсы программы в папку, заменить скучные обои на свои - весёлые, запакуйте ресурсы обратно и пользуйтесь на здоровье!
    Ответ написан
    4 комментария
  • Регистрация Gmail массово как?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    1) Наймите 50-100 человек, и пусть регистрируют со своих пк и ip.
    2) И мне кажется, там нужно указывать реальный номер телефона (решение смотрите в пункте 1).
    3) И правильно делают что банять, так как спам - это плохо!
    Ответ написан
    4 комментария
  • Терминал выдает ошибку при запуске файла с ботом и некоректно работает погода. Сможете помочь?

    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 комментарий
  • Как установить на убунту sqlitestudio?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    sudo apt-get update
    sudo apt-get install sqlitebrowser
    Ответ написан
    Комментировать
  • Парсинг на 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 комментария
  • Ввести на сайт из переменной в Python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Возможно. Можно использовать requests. Также зависит от сайта. Он (сайт, вроде google) может показать капчу.
    Вообще на python можно реализовать все что угодно(в разумных пределах), все зависит от программиста.
    Вот за пол минутки набросал для тостера:
    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://qna.habr.com/search?q='
    
    def search(keyword):
    	responce = requests.get(url+keyword)
    	soup = BeautifulSoup(responce.text,"html.parser")
    	try:
    		contents = soup.find_all('li',class_='content-list__item')
    		for answers in contents:
    			title = answers.find('a',class_='question__title-link question__title-link_list').text.strip()
    			count = answers.find('div',class_='mini-counter__count mini-counter__count_grey').text.strip()
    			print(f'{title} {count}')
    	except:
    		pass
    
    keyword = input('Введите запрос: ')
    search(keyword)

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