Малоизвестные, но полезные пакеты Python

В этой статье мы познакомим вас с несколькими пакетами Python, которые не очень известны, но очень полезны.

Пакеты — это готовый код Python (классы, функции и т.д.), который вы можете использовать в своих проектах. Обычно они располагаются в определенном каталоге вашей среды. Вы можете создавать свои собственные пакеты или загружать множество замечательных и бесплатных пакетов Python из официального репозитория PyPI.

Установка пакетов Python

Чтобы установить пакет из PyPI, вы можете воспользоваться pip — установщиком пакетов для Python. Он предустановлен в большинстве современных дистрибутивов Python и очень прост в использовании. Например, если вы хотите установить пакет с именем «awesome-package» в свою среду, вы можете выполнить следующую команду в терминале:

pip install awesome-package

По умолчанию pip установит последнюю стабильную версию пакета. Если вы хотите установить определенную версию (например, версию 0.93), вы можете указать ее таким образом:

pip install awesome-package==0.93

Обратите внимание, что pip сам по себе является пакетом. Вы можете обновить его до последней версии, выполнив следующую команду:

pip install --upgrade pip

Вы можете задаться вопросом, стоит ли устанавливать пакеты Python или лучше написать код самостоятельно. Ответ таков: если это позволяет сэкономить время и деньги, используйте пакет! Сообщество энтузиастов Python уже разработало большинство вычислений и алгоритмов, которые понадобятся вам для ваших проектов, поэтому не тратьте свое время. Используйте пакеты Python!

Возможно, вы использовали (или хотя бы слышали о нем) NumPy — пакет Python, позволяющий работать с большими структурами данных. NumPy — это результат колоссальной работы сообщества Python. Сейчас это незаменимый инструмент для специалистов по обработке данных.

От редакции Pythonist: узнать больше о NumPy можно из цикла статей «Учебник по библиотеке NumPy: учитесь на примерах».

А теперь давайте поговорим о тех самых недооцененных пакетах Python, которые мы анонсировали в начале статьи.

BeautifulSoup

BeautifulSoup — это библиотека Python для извлечения и парсинга данных из файлов HTML и XML.

Представьте, что ваша компания хранит все статьи своего блога в формате HTML в реляционной базе данных. SEO-отдел просит вас добавить тег nofollow ко всем внешним ссылкам статей. Вы решаете распарсить статьи с помощью BeautifulSoup, найти все ссылки (используя функцию find_all из библиотеки), добавить nofollow для каждой ссылки и вернуть полученную строку.

Вот код, который вы бы использовали:

from bs4 import BeautifulSoup
 
# Get the article content and parse it as HTML
article_html = '<h1>Title</h1><p>text and text<a href="some_url">Click here</a></p>'
soup = BeautifulSoup(article_html, 'html.parser')
 
# Find all the links and add the nofollow tag
for link in soup.find_all('a'):
    link["rel"] = "nofollow"
 
print(str(soup))
# Shows: <h1>Title</h1><p>text and text<a href="some_url" rel="nofollow">Click here</a></p>

Довольно просто, правда? Вы можете ознакомиться со всеми доступными функциями в докуменатции BeautifulSoup.

pyppeteer

Пакет pyppeteer — это Python-версия Puppeteer, библиотеки Node.js, которая предоставляет высокоуровневый API для управления функциями Chrome/Chromium. Проще говоря, он позволяет запускать браузер Chrome или Chromium в среде Python и автоматизировать простые действия, такие как посещение сайта, нажатие на кнопку и т. д.

Допустим, вы работаете в отделе электронной коммерции компании по производству спортивного оборудования. Операционисты просят вас сделать скриншоты некоторых товаров и сохранить их в формате PDF. Вы решаете автоматизировать этот процесс с помощью библиотеки pyppeteer:

import asyncio
from pyppeteer import launch
 
async def main():
    # Create a new browser instance
browser = await launch()
        page = await browser.newPage()
 
    # Visit a specific URL
        await page.goto("https://myshop.com/products?sku=1234")
 
    # Take a screenshot a keep it in a PDF file
    await page.emulateMedia("screen")   
    await page.pdf({"path": "exports/screen_1234.pdf"})   
 
    # Close the browser instance
    await browser.close()
 
# Run the main function
asyncio.get_event_loop().run_until_complete(main())

Впечатляет! Обратите внимание, что pyppeteer нуждается в библиотеке Asyncio для выполнения асинхронных вызовов. Вы можете ознакомиться со всей документацией по Pyppeteer этой ссылке.

Telethon

Telethon — это библиотека Python, которая позволяет вам взаимодействовать с API Telegram. Вы можете отправлять, получать или ждать новых сообщений Telegram внутри вашего Python-приложения. Вы также можете отправлять файлы контакту или группе контактов.

Давайте продолжим наш предыдущий пример с pyppeteer. Чтобы полностью автоматизировать мониторинг продукта, вы хотите загрузить PDF-файлы в группу Telegram, где находятся операционисты. С помощью Telethon это можно сделать очень быстро:

from telethon.sync import TelegramClient
 
with TelegramClient("name", api_id, api_hash) as client:
    channel = client.get_input_entity(channel_id)
    client.send_file(channel, "exports/screen_1234.pdf")
    client.run_until_disconnected()

Удивительно просто! Вам нужно только получить ID и хэш Telegram API (что можно сделать за несколько минут), как указано в документации Telethon.

PyWhatKit

Telegram позволяет свободно использовать свой API. С WhatsApp дело обстоит иначе: если вы хотите отправлять сообщения в WhatsApp из своего приложения, вам понадобится WhatsApp Business. Однако есть классный хак для настольных компьютеров — благодаря библиотеке PyWhatKit. Это библиотека Python, которая тесно сотрудничает с инструментом автоматизации браузера Selenium. Когда вы хотите отправить сообщение в WhatsApp, она открывает WhatsApp Web в новой вкладке браузера, помещает сообщение в поле ввода и автоматически отправляет его вашему контакту или группе.

Представьте, что вы создали в WhatsApp группу экстренной помощи с членами вашей команды. Вы хотите автоматически пересылать некоторые оповещения, полученные по email на ноутбуке. Сделать это очень просто:

import pywhatkit
 
pywhatkit.sendwhatmsg_to_group_instantly("X6jaeFeVWGQ5B9jWpSQFcz", "Alert: EC2 server reached 80% capacity")

Вы можете легко найти код группы на экране приглашения в WhatsApp:

Проще некуда! Со всеми фантастическими функциональными возможностями PyWhatKit можно ознакомиться в его официальной документации.

XlsxWriter

XlsxWriter — это очень мощный модуль Python для записи файлов в формате Excel. Он поддерживает добавление текста, чисел, формул, изображений и макросов Excel — среди прочих функциональных возможностей. XlsxWriter даже интегрируется с pandas, известным пакетом Python для работы с данными.

От редакции Pythonist: о Pandas читайте в статье «Полное руководство по Pandas для начинающих».

Представьте, что ваш начальник просит вас подготовить финансовый отчет за текущий квартал. Отчет должен быть в формате Excel, чтобы представить его совету директоров. На копирование и вставку значений из базы данных могут уйти часы. Вы не хотите выполнять эту задачу каждый квартал, поэтому решили автоматизировать процесс с помощью XlsxWriter. Вот простой пример того, как это можно сделать:

import xlsxwriter
 
# Create a new XLSX file and a new tab
workbook = xlsxwriter.Workbook("Q4 Financial Report.xlsx")
worksheet = workbook.add_worksheet("October")
 
# Insert the company logo in the first cell
worksheet.insert_image("A1", "logo.png")
 
# Define a bold style for the column headers
header_format = workbook.add_format({"bold": True})
 
# Write some numbers, with row/column notation.
worksheet.write(3, 0, "Gross Margin", header_format)
worksheet.write(4, 0, 2.45)
worksheet.write(3, 0, "EBITDA", header_format)
worksheet.write(4, 0, 5.12)
 
# Save and close file
workbook.close()

XlsxWriter действительно впечатляет! Вот полная документация.

Emoji

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

Если хотите реализовать подобную логику в своем приложении на Python, можете использовать пакет Emoji. Благодаря этому небольшому и удобному пакету можно перевести обычный текст в эмодзи и обратно. Вот простой пример:

import emoji
 
print(emoji.emojize('Learning :snake: is :fire:'))
# Shows: Learning ?? is ??
 
print(emoji.demojize('This emoji is a ??'))
# Shows: This emoji is a :dog_face:

Вы можете найти все доступные функции Emoji в официальной документации.

Faker

Библиотека Faker генерирует вымышленные данные — например, имена и адреса — на различных языках.

Представьте, что вы хотите протестировать разрабатываемое приложение с базой данных, чтобы убедиться в ее достаточной емкости. База данных содержит классические пользовательские данные: имена, адреса, места работы, компании, даты рождения и т.д. Вы можете легко заполнить таблицы с помощью Faker, который предоставляет красивые и реалистичные данные. Вот пример:

from faker import Faker
from faker.providers import internet
 
fake = Faker("fr_FR")
 
# Generate a fake french name
print(fake.name())
# Shows: Robert Rousset
 
# Generate a fake french address
print(fake.address())
# Shows:
# 99, boulevard Théodore Maurice
# 62856 Laporte-sur-Louis
 
# Generate a fake IPv4 address
fake.add_provider(internet)
print(fake.ipv4_private())
# Shows: 172.30.46.147

Faker предоставляет гораздо больше удивительных поддельных данных, так что непременно загляните в его документацию!

Спасибо за внимание!