Nikovit <Путешествия и разработка>

Парсер сайтов на Python

Desktop_screenshot (1).png
Сегодня мы напишем с вами парсер сайтов на Python

Задача:
С сайта https://www.sds-group.ru/ загрузить изображения товаров в формате артикул_товара.jpg и описание товаров в формате артикул_товара.txt для последующей загрузки в 1С.
Файл Excel с артикулами которые нужно загрузить прилагается(в файле две колонки первая - артикула, вторая - наименование товара).

Python ищем файл в папке по названию

Для поиска файла в папке по названию и получения полного пути к файлу я использую следующий скрипт.
import os

# Директория в которой ищем
dir = "d:\\Temp\\"

# Имя файла
file = "123.jpg"

# Получаем список файлов в директории
names = os.listdir(dir)

# Ищем файл
for name in names:
    # Если нашли то получаем полное имя файла и выводим
    if file == name:
        fullname = os.path.join(dir, name)
        print(fullname)

Telegram бот пересылки сообщений из RSS канала

python_and_rss.png

Сегодня мы напишем бота пересылки сообщений из RSS ленты в канал telegram.

Отправляем email из скрипта Python

email.jpg

Иногда при возникновении ошибки в работе скрипта Python нам нужно отправить сообщение на почту, ниже я приведу пример скрипта которым сам пользуюсь.

Отправлять письмо из Python будем с яндекс почты.

Самый простой способ скомпилировать python файл в exe

2019-04-15.png
Я перепробовал кучу разных утилит для компиляции python скрипта в .exe и везде были проблемы или не собирался файл, лог ошибками сыпал, файл собирался но не запускался и т.д.

И помог мне самый простой и легкий способ, расскажу о нем в трех шагах:

1. Устанавливаем пакет для сборки скрипта в exe
pip install pyinstaller

2. Переходим в папку со скриптом
cd c:\Свой_путь_до_скрипта

3. Запускаем компиляцию
pyinstaller --onefile main.py 

Вместо main.py подставляем свое имя скрипта если это отличается.
После сборки в папке проекта рядом с вашим скриптом появится папка dist в которой и будет находится exe файл.
Этот способ работает с установленными сторонними библиотеками python.

Python - openpyxl считываем значение колонки Excel

В последнее время очень часто приходиться работать с Excel средствами Python, ниже приведен код для чтения значений из выбранной колонки Excel

import openpyxl
path = "file.xlsx" #имя файла 

wb_obj = openpyxl.load_workbook(path)  #Открываем файл
sheet_obj = wb_obj.active #Выбираем активный лист таблицы(
m_row = sheet_obj.max_row

# Выводим значения в цикле
for i in range(1, m_row + 1):
    cell_obj = sheet_obj.cell(row=i, column=2) # В column= подставляем номер нужной колонки
    print(cell_obj.value) # Выводим значение

Пишем ping бота для Telegram на Python

  2018-04-19.jpg


Для простого мониторинга доступности ресурса нет смысла подымать Zabbix или Nagios, сегодня мы напишем простого бота который пингует ресурс/сайт и если ресурс не доступен то отправляет сообщение в Telegram.

Пишем бота пересылки сообщений из VK в Telegram на Python

 
aaf44db7572a2fcafef3ae5ea5c20bb2.png

Очень часто бывает что у вас группа в vk.com и вам бы хотелось завести канал в телеграмм но постить вручную сообщения в два источника не очень удобно. Ниже мы рассмотрим бота для пересылки сообщений из вконтакте в телеграм.

Python удаляем старые бэкапы

Часто папка с бэкапами сильно разрастается в конечном итоге займет все место на диске и новые бэкапы создаваться не будут, скрипт удаляет старые файлы бэкапов которым более n дней.
import shutil
from os import listdir
from os.path import isdir, join
from datetime import timedelta, datetime
import os.path
 
# Директория с бэкапами
directory = r'//192.168.0.26/backup/1C-backup/'
 
# Время хранения бэкапов в днях
days = timedelta(days=60)
 
# Получаем содержимое директории
only_directory = [f for f in listdir(directory) if isdir(join(directory, f))]
 
# Пробегаемся в цикле по директории
for folder in only_directory:
    p = [x for x in listdir(directory + folder)]
    for path in p:
        # Определяем возраст папки
        how_long_ago_creation_date = datetime.now()-datetime.fromtimestamp(os.path.getctime(directory+folder+'/'+path))
        print(path+" created "+str(how_long_ago_creation_date)+" ago")
         
            # Если дата создания папки больше days то удаляем
            if (how_long_ago_creation_date>days):
                print("Delete folder: "+directory+folder+'/'+path)
             
            # Исключение так как не всегда удается удалить, папка/файл может быть чемто занята
            try:
                shutil.rmtree(os.path.join(os.path.abspath(os.path.dirname(__file__)), directory+folder+'/'+path))
            except OSError:
                print('Не удалось удалить папку')