Обновление до Python 3.12 на вашем Raspberry Pi

Послушайте, если вы разработчик на Python, который стремится к домашней автоматизации, энергетическим решениям и устойчивому развитию климата, — тогда вы знаете, что Python 3.12 абсолютно изменяющий правила игры. Особенность Raspberry Pi в том, что это не просто крошечный компьютер; это песочница для вашего воображения! А при использовании Python 3.12? О боже, тебя ждет приключение.

 

Мы довольно долго с нетерпением ждали Python 3.12, почему? — улучшенный синтаксический анализ f-строк, улучшенные сообщения об ошибках, поддержка изолированных субинтерпретаторов (только представьте возможности параллельной обработки для домашней автоматизации), и список можно продолжать!

Итак, мы приступим к его установке?

 

Во-первых, убедитесь, что ваша операционная система Raspberry Pi обновлена:

sudo apt update && sudo apt upgrade -y


 

Перейдите на официальный веб-сайт Python и возьмите исходный код Python 3.12.

wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz


 

tar -xf Python-3.12.0.tgz

cd Python-3.12.0


 

Выполните следующие команды для настройки и компиляции Python 3.12.

./configure --enable-optimizations

make -j 4

sudo make altinstall


 

И вуаля! Теперь Python 3.12 должен быть установлен.

При желании вы также можете использовать мой автоматический скрипт, но имейте в виду, что для python 3.12 будет установлена версия python по умолчанию. И это не всегда хорошо.

Все равно хотите попробовать?

wget -qO - https://raw.githubusercontent.com/tvdsluijs/sh-python-installer/main/python.sh | sudo bash -s 3.12

 

  1. Более гибкий синтаксический анализ f-строк (PEP 701)

    Представьте, как легко создавать строки в сложном формате. Это идеально подходит для регистрации данных датчиков в моих задачах домашней автоматизации.
  2. Поддержка протокола Buffer в коде Python (PEP 688)

    Я был в восторге от этого. Теперь манипулировать двоичными данными проще простого.
  3. Новый API отладки/профилирования (PEP 669)

    Отладка стала намного проще. Как тренер по гибкой разработке и владелец продукта, упрощенная отладка означает более быстрые циклы развертывания.
  4. Изолированные субинтерпретаторы с отдельными GILS (PEP 684)

    Это изменило правила игры в моих проектах по энергосбережению и домашней автоматизации. Выполнение нескольких задач параллельно? Да, пожалуйста!
  5. Улучшены сообщения об ошибках

    Для тех, кто ежедневно программирует на Python, расширенные сообщения об ошибках значительно экономят время.
  6. Поддержка Linux perf Profiler

    Теперь вы можете видеть имена функций Python непосредственно в трассировках производительности Linux.
  7. Повышение производительности

    При предполагаемом повышении общей производительности на 5% мой Raspberry Pi работает быстрее.
  8. Новый синтаксис аннотаций типов для универсальных классов (PEP 695)

    Это упрощает способ определения универсальных классов, делая ваш код более читабельным.
  9. Переопределить декоратор для методов (PEP 698)

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

 

  • Устаревшие методы в unittest модуле и старые модули, такие как smtpd и distutils, были удалены.
  • Теперь SyntaxWarnings предупреждает о недопустимых escape-последовательностях обратной косой черты в строках.
  • Кроме того, была удалена куча других устаревших и неработающих функций.

 

Итак, почему мы поспешили установить Python 3.12 на свой Raspberry Pi? Функции идеально соответствуют профессиональным занятиям и интересам любителей. Как разработчику на Python, вы должны всегда искать способы оптимизировать потребление энергии, оптимизировать код и внедрять инновации в области устойчивого развития. Python 3.12 с его функциями, такими как изолированные субинтерпретаторы, новый API отладки и многое другое, делает это путешествие захватывающим и результативным.

Обновление до Python 3.12 откроет для вас целый мир возможностей. Так что, если вы, как и мы, хотите раздвинуть границы возможного с помощью Python и Raspberry Pi, сделайте обновление.



2023-12-01T07:56:44
Python

Как получать деньги от зарубежных заказчиков в 2023 году

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

 

Основные способы получения денег от зарубежных заказчиков

Существует несколько основных способов получения денег от зарубежных заказчиков:

  • Банковский перевод
  • Сервисы-обменники
  • Платежные системы
  • Сервисы для удаленных сделок

 

Банковский перевод

Банковский перевод — это самый традиционный способ получения денег от зарубежных заказчиков. Для этого необходимо открыть валютный счет в российском банке, который поддерживает SWIFT-переводы. Затем вы можете предоставить реквизиты своего счета заказчику, и он сможет перевести вам деньги.

 

Преимущества банковского перевода:

  • Это самый надежный способ получения денег.
  • При переводе больших сумм можно сэкономить на комиссиях.

 

Недостатки банковского перевода:

  • Перевод может занять несколько дней.
  • Комиссия за перевод может быть высокой.

 

Сервисы-обменники

Сервисы-обменники позволяют быстро и удобно обменивать валюту. Для того, чтобы получить деньги от зарубежного заказчика через сервис-обменник, вам необходимо открыть кошелек на сервисе и предоставить его реквизиты заказчику. Затем заказчик переведет вам деньги в иностранной валюте, а сервис-обменник конвертирует их в рубли и зачислит на ваш кошелек.

 

Преимущества сервисов-обменников:

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

 

Недостатки сервисов-обменников:

  • При обмене валюты может быть потеря из-за разницы курсов.
  • Сервисы-обменники могут быть ненадежны.

 

Платежные системы

Платежные системы позволяют получать деньги от зарубежных заказчиков в различных валютах. Для этого необходимо открыть счет в платежной системе и предоставить его реквизиты заказчику. Затем заказчик сможет перевести вам деньги, используя свой счет в этой платежной системе.

 

Преимущества платежных систем:

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

 

Недостатки платежных систем:

  • Платежные системы могут быть ненадежны.
  • При переводе денег в Россию может быть потеря из-за разницы курсов.

 

Сервисы для удаленных сделок

Сервисы для удаленных сделок, такие как Upwork, Fiverr и Freelancer, предоставляют платформу для взаимодействия между заказчиками и исполнителями. Для того, чтобы получать деньги от зарубежных заказчиков через такие сервисы, вам необходимо зарегистрироваться на сервисе, создать профиль и начать искать заказчиков. Когда вы найдете заказчика и согласуете условия работы, сервис будет выступать посредником между вами и заказчиком. Сервис будет получать деньги от заказчика и выплачивать вам вашу часть после завершения проекта.

 

Преимущества сервисов для удаленных сделок:

  • Это удобный способ найти зарубежных заказчиков.
  • Сервисы обеспечивают защиту прав исполнителей.

 

Недостатки сервисов для удаленных сделок:

  • Сервисы берут комиссию за каждую сделку.
  • Заказчики могут быть ненадежны.

 

Как выбрать способ получения денег от зарубежных заказчиков

При выборе способа получения денег от зарубежных заказчиков необходимо учитывать следующие факторы:

  • Сумма переводов: Если вы планируете получать небольшие суммы, то можно использовать сервисы-обменники или платежные системы. Для крупных сумм лучше использовать банковский перевод.
  • Страна заказчика: Если заказчик находится в стране, которая входит в систему SWIFT, то можно использовать банковский перевод. Если же заказчик находится в стране, которая не входит в систему SWIFT, то лучше использовать сервисы-обменники или платежные системы.
  • Удобство: Учитывайте, какой способ получения денег будет для вас наиболее удобным. Если вы планируете часто получать деньги, то лучше выбрать способ, который позволяет делать это быстро и без лишних хлопот.

 

Советы по получению денег от зарубежных заказчиков

Вот несколько советов, которые помогут вам получать деньги от зарубежных заказчиков без проблем:

  • Сохраняйте все подтверждающие документы: Обязательно сохраняйте все подтверждающие документы, связанные с получением денег от зарубежных заказчиков. Это могут быть чеки, выписки из банка, электронные письма и другие документы. Эти документы могут понадобиться вам в случае возникновения споров или проблем.
  • Будьте осторожны с мошенниками: К сожалению, в интернете существует множество мошенников, которые пытаются обмануть удаленных работников. Будьте внимательны и не соглашайтесь на подозрительные предложения.
  • Не переводите деньги на личные счета заказчиков: Никогда не переводите деньги на личные счета заказчиков. Всегда используйте проверенные платежные системы или сервисы для удаленных сделок.
  • Не бойтесь обращаться за помощью: Если у вас возникли проблемы с получением денег от зарубежных заказчиков, не бойтесь обращаться за помощью. Существует множество организаций, которые могут помочь вам защитить свои права.

 

Заключение

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

Вот несколько дополнительных советов, которые могут быть полезны для вас:

  • Если вы планируете работать с зарубежными заказчиками на постоянной основе, то может быть полезно открыть счет в зарубежном банке. Это позволит вам получать деньги от заказчиков быстрее и без дополнительных комиссий.
  • Изучите законы и правила своей страны, касающиеся получения денег от зарубежных заказчиков. Это поможет вам избежать проблем с законом.
  • Будьте готовы к тому, что вам может потребоваться заплатить налоги с полученных денег. Узнайте, какие налоги необходимо платить в вашей стране, и рассчитайте их заранее.



2023-11-30T20:34:50
Бизнес

В чем разница между append и extend в Python?

В Python работа со списками является обычной и важной задачей для многих программистов. Списки, являясь универсальной структурой данных, предлагают несколько методов манипулирования своими элементами. Двумя такими часто используемыми методами являются append() и extend() . Хотя на первый взгляд эти методы могут показаться похожими, они служат разным целям и могут иметь значительные последствия для структуры и содержимого списка.

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

 

Что такое функция append в python?

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

В чем разница между append и extend в Python?

 

Синтаксис функции append() довольно прост:

list_name.append(повторяемый)

 

Здесь list_name — это имя списка, в который вы хотите добавить элемент.

Давайте посмотрим пример того, как использовать функцию append():

 

Инициализация пустого списка

fruits = []

 

Добавление элементов в список с помощью append()

fruits.append(‘яблоко’)

fruits.append(‘банан’)

fruits.append(‘апельсин’)

print(fruits) # Вывод: [‘яблоко’, ‘банан’, ‘апельсин’]

 

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

 

Что такое функция extend в Python?

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

 

Синтаксис функции extend() следующий:

list_name.extend(повторяемый)

 

Здесь list_name — это имя списка, в который вы хотите добавить элементы, а iterable — это последовательность элементов, которые вы хотите добавить в список.

Давайте посмотрим пример того, как использовать функцию extend():

 

Инициализация пустого списка

fruits = [‘яблоко’, ‘банан’]

 

Добавление элементов из другого списка с помощью extend()

additional_fruits = [‘апельсин’, ‘виноград’, ‘манго’]

fruits.extend(additional_fruits)

print(fruits) # Вывод: [‘яблоко’, ‘банан’, ‘апельсин’, ‘виноград’, ‘манго’]

 

В приведенном выше примере функция extend() используется для добавления элементов из списка additional_fruits в список fruits. В результате список fruits теперь содержит все элементы из обоих списков.

 

Разница между append и extend в Python

Вот ключевые моменты, которые являются основным различием между append и extend в python







ДобавитьРасширить
Элемент argument, указанный в качестве входных данных, добавляется в конец списка.Каждый повторяющийся элемент, предоставляемый в качестве параметра, добавляется в конец исходного списка.
Длина списка увеличивается на единицу.Длина списка увеличивается пропорционально количеству элементов в iterable.
Метод Append() имеет постоянную временную сложность O(1) Метод append() имеет постоянную временную сложность, это связано с тем, что доступ к спискам осуществляется спонтанно, самый последний элемент может быть достигнут за O (1) время, вот почему добавление любого нового элемента в конец списка занимает O (1) времени.Метод Extend() в Python показывает временную сложность, равную O(n), где переменная n демонстрирует размер итерируемого объекта, поскольку функция должна выполнять итерации по длине списка.

Сравнение Extend и Append в одной программе

Вот единственная программа, которая сравнит ключевое различие между append и extend в Python.

Реализация кода

 

# Давайте напишем программу на Python, чтобы понять

# разница между двумя обсуждаемыми методами

# первым шагом будет назначение двух списков



list_one = [2, 3, 4]

list_two = [2, 3, 4]

x = [5, 6]



# используйте два разных метода



list_one.append(x)

list_two.extend(x)



# отображение списков с помощью инструкции print.



print(list_one)



#печать второго списка



print(list_two)

 

Вывод

[2, 3, 4, [5, 6]]

[2, 3, 4, 5, 6]

 

Заключение

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

Функция append() используется для добавления отдельного элемента в конец списка. Она проста и эффективна для добавления отдельных элементов.

С другой стороны, функция extend() используется для добавления нескольких элементов из итерируемого объекта (например, другого списка, кортежа) в конец списка. Это полезно для эффективного объединения списков.

 

Часто задаваемые вопросы о разнице между append и extend в Python:

Вот несколько часто задаваемых вопросов о разнице между append и extend в Python.

1. Могут ли append() и extend() использоваться взаимозаменяемо?

Нет, append() и extend() не могут использоваться взаимозаменяемо. У них разные цели. Использование extend() для добавления одного элемента приведет к неожиданному поведению, поскольку весь итерируемый объект будет добавлен как один элемент. Аналогично, append() нельзя использовать для добавления нескольких элементов одновременно.

2. Может ли функция extend() добавлять элементы из разных типов данных?

Да, extend() может добавлять элементы из любого iterable, включая списки, кортежи, строки и другие последовательности. Пока iterable совместим со списком, его можно использовать с extend().

3. Какой метод более эффективен, append() или extend()?

Эффективность append() и extend() зависит от конкретного варианта использования. Если вам нужно добавить отдельные элементы, append() более эффективен, поскольку включает в себя одну операцию. Для добавления нескольких элементов из iterable функция extend() обычно более эффективна, чем использование цикла для добавления элементов один за другим.

4. Можно ли использовать append() и extend() в других структурах данных в Python?

Нет, append() и extend() специфичны для списков в Python. Они являются специфичными для списков методами и не могут использоваться в других структурах данных, таких как кортежи, наборы или словари.

5. Можно ли использовать append() и extend() в пустом списке?

Да, и append(), и extend() можно использовать в пустом списке. Если вы используете append() в пустом списке, он добавит указанный элемент в качестве первого элемента списка. Если вы используете extend() для пустого списка, он добавит все элементы из iterable, делая список идентичным iterable .



2023-11-30T16:21:02
Python

Как установить Чат ГПТ на русском?

Современные технологии делают жизнь человека более комфортной и эффективной. Одной из таких технологий является искусственный интеллект (ИИ), который становится все более доступным и полезным. Одним из самых интересных приложений ИИ является чат-бот, способный проводить разговоры и отвечать на вопросы, а также выполнять различные задачи. Один из таких чат-ботов — Чат ГПТ от OpenAI. В этой статье мы рассмотрим, как установить Чат ГПТ на русском языке и какие возможности он предоставляет.

 

Что такое Чат ГПТ?

Чат ГПТ — это продукт, созданный на базе технологии GPT-3.5 от OpenAI. GPT (Generative Pre-trained Transformer) — это модель искусственного интеллекта, обученная на огромном объеме текстовых данных. Она способна понимать и генерировать текст, что делает ее идеальным инструментом для создания чат-ботов.

Чат ГПТ может быть использован в различных сферах, таких как обслуживание клиентов, помощь в поиске информации, генерация текстов и многое другое. Он способен проводить разговоры на разных языках, включая русский.

 

Установка Чат ГПТ на русском языке

Регистрация на платформе OpenAI:

Для начала вам необходимо зарегистрироваться на платформе OpenAI. Перейдите на официальный сайт OpenAI (https://www.openai.com/) и следуйте инструкциям для создания аккаунта.

Получение доступа к API:

Чтобы использовать Чат ГПТ, вам нужно получить доступ к API OpenAI. Это платное предложение, и стоимость использования зависит от объема запросов и использования. После регистрации на платформе, вы сможете запросить доступ к API и получить ключ для его использования.

 

Возможности Чат ГПТ на русском

Обслуживание клиентов: Вы можете использовать Чат ГПТ для автоматического ответа на вопросы клиентов и решения их проблем.

Генерация текстов: Чат ГПТ может помочь в создании контента, такого как статьи, описания продуктов и многое другое.

Перевод текстов: Он способен переводить тексты с одного языка на другой, включая русский.

Автоматизация задач: Чат ГПТ может выполнять рутинные задачи, освобождая время для более важных дел.

Помощь в образовании: Он может служить отличным инструментом для обучения и получения информации.

Чат ГПТ на русском языке — это мощный инструмент, который может улучшить вашу производительность и обогатить ваш опыт в различных областях. Установка и настройка Чат ГПТ несложны, и с его помощью вы можете достичь впечатляющих результатов. Не стесняйтесь экспериментировать и использовать его для решения разнообразных задач в вашей повседневной жизни и работе.

Специализированные сервисы, такие как https://chadgpt.ru/, предлагают регистрацию без иностранных номеров и VPN. Это упрощает процесс и делает его доступным для всех жителей России.



2023-11-30T15:53:09
Машинное обучение

Библиотека urllib в Python

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

Содержание

Введение в urllib

Urllib – это библиотека Python, предоставляющая набор модулей для работы с URL (Uniform Resource Locators). Она позволяет взаимодействовать с веб-ресурсами, выполняя HTTP-запросы, разбирая URL и обрабатывая различные аспекты веб-коммуникаций.

Зачем нужна библиотека urllib? Это мощный инструмент для решения веб-задач на языке Python. Библиотека широко используется для веб-скреппинга, выполнения API-запросов, загрузки файлов из Интернета и т.д. С помощью urllib можно автоматизировать различные процессы, связанные с веб, что делает ее незаменимой библиотекой для веб-разработчиков и специалистов по исследованию данных.

Установка urllib

Urllib входит в состав стандартной библиотеки Python, поэтому ее не нужно устанавливать отдельно. Вы можете начать использовать ее, импортировав соответствующие модули в свой Python-скрипт.

Эта библиотека доступна как в Python 2, так и в Python 3, однако его использование может несколько отличаться в разных версиях. Рекомендуется использовать Python 3, так как Python 2 больше не поддерживается.

Модули urllib

Библиотека urllib состоит из нескольких модулей, каждый из которых выполняет определенную задачу. Рассмотрим основные из них.

urllib.request

Модуль urllib.request предоставляет функции для выполнения HTTP-запросов, включая GET- и POST-запросы, и обработки ответов.

import urllib.request

# Пример: отправка GET-запроса
response = urllib.request.urlopen('https://example.com')
html = response.read()
print(html)

urllib.parse

Модуль urllib.parse предназначен для парсинга URL-адресов. Он разбивает их их на такие компоненты, как scheme, netloc, path, query и fragment.

import urllib.parse

# Пример: парсинг URL
url = 'https://www.example.com/path?param=value'
parsed_url = urllib.parse.urlparse(url)
print(parsed_url)

urllib.error

Модуль urllib.error обрабатывает исключения и ошибки, которые могут возникать при выполнении HTTP-запросов.

import urllib.error

try:
    response = urllib.request.urlopen('https://nonexistent-url.com')
except urllib.error.HTTPError as e:
    print(f'HTTP Error: {e.code}')
except urllib.error.URLError as e:
    print(f'URL Error: {e.reason}')

urllib.robotparser

Модуль urllib.robotparser используется для разбора файлов robots.txt, чтобы проверить, разрешен ли доступ веб-краулеру к определенным частям сайта.

import urllib.robotparser

rp = urllib.robotparser.RobotFileParser()
rp.set_url('https://example.com/robots.txt')
rp.read()
allowed = rp.can_fetch('MyCrawler', 'https://example.com/page')
print(allowed)

Основные HTTP-запросы

Отправка GET-запросов

Получение веб-содержимого при помощи GET-запросов – одна из основных операций в urllib.

import urllib.request

response = urllib.request.urlopen('https://example.com')
html = response.read()
print(html)

Отправка POST-запросов

POST-запросы служат для отправки данных на сервер. Они часто используются в веб-формах.

import urllib.request
import urllib.parse

data = urllib.parse.urlencode({'param1': 'value1', 'param2': 'value2'}).encode('utf-8')
response = urllib.request.urlopen('https://example.com/post', data=data)
html = response.read()
print(html)

Работа с HTTP-ответами

Вы можете получить доступ к различным свойствам HTTP-ответа, таким как код состояния, заголовки и содержимое.

import urllib.request

response = urllib.request.urlopen('https://example.com')
status_code = response.getcode()
headers = response.info()
html = response.read()
print(f'Status Code: {status_code}')
print(f'Headers: {headers}')
print(html)

Обработка ошибок HTTP

Urllib обеспечивает обработку ошибок, связанных с HTTP, таких как 404 Not Found или ошибки подключения.

import urllib.error

try:
    response = urllib.request.urlopen('https://nonexistent-url.com')
except urllib.error.HTTPError as e:
    print(f'HTTP Error: {e.code}')
except urllib.error.URLError as e:
    print(f'URL Error: {e.reason}')

Работа с URL-адресами

Парсинг URL-адресов

При помощи модуля urllib.parse можно разобрать URL на составляющие.

import urllib.parse

url = 'https://www.example.com/path?param=value'
parsed_url = urllib.parse.urlparse(url)
print(f'Scheme: {parsed_url.scheme}')
print(f'Netloc: {parsed_url.netloc}')
print(f'Path: {parsed_url.path}')
print(f'Query: {parsed_url.query}')

Конструирование URL-адресов

Вы можете конструировать URL, комбинируя их компоненты с помощью urllib.parse.urlunparse() или добавляя параметры запроса к существующему URL.

import urllib.parse

components = ('https', 'example.com', 'path', '', 'param=value', '')
constructed_url = urllib.parse.urlunparse(components)
print(constructed_url)

Продвинутые приемы использования urllib

Работа с файлами cookie

Urllib может работать с cookies с помощью модуля http.cookiejar. Он позволяет управлять данными сессии между запросами.

import urllib.request
import http.cookiejar

# Create a cookie jar to store cookies
cookie_jar = http.cookiejar.CookieJar()
# Create an opener with the cookie jar
cookie_handler = urllib.request.HTTPCookieProcessor(cookie_jar)
opener = urllib.request.build_opener(cookie_handler)
# Make a GET request to a website that sets cookies
url = 'https://httpbin.org/cookies/set?cookie1=value1&cookie2=value2'
response = opener.open(url)
# Check if cookies have been received and stored
if cookie_jar:
    print("Cookies Received:")
    for cookie in cookie_jar:
        print(f"{cookie.name}: {cookie.value}")

Работа с заголовками

Вы можете манипулировать HTTP-заголовками для включения в запросы дополнительной информации, например, User-Agent или пользовательских заголовков.

import urllib.request

url = 'https://example.com'
headers = {'User-Agent': 'My User Agent'}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)

Работа с перенаправлениями

Urllib может автоматически следовать за HTTP-перенаправлениями. При необходимости это поведение можно отключить.

import urllib.request

# Create a Request object with a URL that redirects
url = 'http://www.example.com'  # This URL redirects to 'https://www.example.com'
req = urllib.request.Request(url, headers={'User-Agent': 'My User Agent'})
# Open the URL without following redirects
response = urllib.request.urlopen(req, allow_redirects=False)
# Check the response status code to see if it's a redirect
if response.status == 302 or response.status == 301:
    print(f'Redirect detected: Status Code {response.status}')
else:
    final_url = response.geturl()  # Get the final URL
    print(f'Final URL: {final_url}')

Работа с тайм-аутами

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

import urllib.request
import urllib.error

url = 'https://example.com'
try:
    response = urllib.request.urlopen(url, timeout=10)  # Set a timeout of 10 seconds
    html = response.read()
    print(html)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print("Request timed out.")
    else:
        print(f"URL Error: {e.reason}")

Веб-скрепинг с помощью urllib

Получение HTML-содержимого

Urllib можно использовать для веб-скрапинга, посылая GET-запросы на сайты и получая HTML-контент.

import urllib.request

url = 'https://example.com'
response = urllib.request.urlopen(url)
html = response.read()

Парсинг HTML с помощью BeautifulSoup

Для извлечения данных из HTML можно объединить urllib с библиотекой типа BeautifulSoup.

import urllib.request
from bs4 import BeautifulSoup

# Send a GET request to a web page and retrieve its HTML content
url = 'https://example.com'
response = urllib.request.urlopen(url)
html = response.read()
# Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
# Find and print a specific element from the HTML (e.g., the page title)
title_element = soup.find('title')
if title_element:
    print('Page Title:', title_element.text)
else:
    print('Title not found on the page.')

Сбор данных с веб-страниц

Вы можете собирать данные с веб-страниц, определяя нужные HTML-элементы и извлекая их содержимое с помощью BeautifulSoup.

import urllib.request
from bs4 import BeautifulSoup

# URL of the web page to scrape
url = 'https://example-news-site.com'

# Send an HTTP GET request to the URL
response = urllib.request.urlopen(url)

# Read the HTML content of the page
html = response.read()

# Parse the HTML content using BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')

# Find and extract article titles
article_titles = []

# Assuming article titles are in h2 tags with a specific class
for h2_tag in soup.find_all('h2', class_='article-title'):
    article_titles.append(h2_tag.text)

# Print the extracted article titles
for title in article_titles:
    print(title)

Примечание редакции: на тему скрапинга читайте также “Скрапинг с помощью Python и Selenium”.

Библиотека urllib и работа с API

Выполнение GET-запросов к API

С помощью urllib можно выполнять GET-запросы к API и получать данные.

import urllib.request

api_url = 'https://api.example.com/data'
response = urllib.request.urlopen(api_url)
data = response.read()
# Parse the JSON response if applicable.

Выполнение POST-запросов к API

Аналогичным образом можно отправлять POST-запросы к API, включив необходимые данные в тело запроса.

import urllib.request
import urllib.parse

data = urllib.parse.urlencode({'param1': 'value1', 'param2': 'value2'}).encode('utf-8')
api_url = 'https://api.example.com/data'
response = urllib.request.urlopen(api_url, data=data)
data = response.read()
# Parse the JSON response if applicable.

Работа с ответами в формате JSON

Многие API-интерфейсы возвращают данные в формате JSON, поэтому для их анализа и работы с ними можно использовать модуль json языка Python.

import urllib.request
import json

api_url = 'https://api.example.com/data'
response = urllib.request.urlopen(api_url)
data = json.loads(response.read().decode('utf-8'))

Скачивание файлов

Загрузка файлов из Интернета

Вы можете использовать urllib для загрузки файлов из Интернета, например, изображений, PDF-файлов или других документов.

import urllib.request

file_url = 'https://example.com/file.pdf'
urllib.request.urlretrieve(file_url, 'downloaded_file.pdf')

Обработка загрузки больших файлов

Для загрузки больших файлов можно использовать потоковый подход для экономии памяти.

import urllib.request

file_url = 'https://example.com/large_file.zip'
with urllib.request.urlopen(file_url) as response, open('downloaded_file.zip', 'wb') as out_file:
    while True:
        data = response.read(4096)
        if not data:
            break
        out_file.write(data)

Лучшие практики

Обработка ошибок

Всегда обрабатывайте исключения и ошибки при выполнении HTTP-запросов или работе с URL-адресами, чтобы обеспечить надежность кода.

import urllib.error
import urllib.request

try:
    response = urllib.request.urlopen('https://nonexistent-url.com')
except urllib.error.HTTPError as e:
    print(f'HTTP Error: {e.code}')
except urllib.error.URLError as e:
    print(f'URL Error: {e.reason}')
else:
    # Code to execute if there are no errors
    html = response.read()
    print(html)

Заголовки User-Agent

Устанавливайте в запросах заголовок User-Agent для идентификации вашего скрипта или приложения при взаимодействии с веб-сайтами или API.

import urllib.request

# Define the User-Agent header
user_agent = 'My Custom User Agent'
# Create a request object with the User-Agent header
url = 'https://example.com'
headers = {'User-Agent': user_agent}
req = urllib.request.Request(url, headers=headers)
# Send the request
response = urllib.request.urlopen(req)
# Now you can work with the response as needed
html = response.read()
print(html)

Соблюдайте правила Robots.txt

Прежде чем приступать к скраппингу, проверьте файл robots.txt сайта, чтобы узнать, разрешен ли скраппинг, и следуйте правилам, чтобы избежать юридических проблем.

import urllib.robotparser

# Create a RobotFileParser object and specify the URL of the website's robots.txt file.
rp = urllib.robotparser.RobotFileParser()
rp.set_url('https://example.com/robots.txt')
# Read and parse the robots.txt file.
rp.read()
# Check if it's allowed to crawl a specific URL.
is_allowed = rp.can_fetch('MyCrawler', 'https://example.com/some-page')
if is_allowed:
    print("Crawling is allowed for this URL.")
else:
    print("Crawling is not allowed for this URL according to robots.txt.")

Ограничение скорости

При выполнении запросов к API следует соблюдать все политики ограничения скорости, чтобы не перегружать сервер.

import urllib.request
import time

# Define the API URL and the rate limit (requests per minute)
api_url = 'https://api.example.com/data'
rate_limit = 60  # 60 requests per minute
# Function to make an API request with rate limiting
def make_api_request_with_rate_limit(url):
    # Calculate the time interval between requests
    time_interval = 60 / rate_limit  # 60 seconds in a minute
    time_since_last_request = time.time() - last_request_time
    if time_since_last_request < time_interval:
        time.sleep(time_interval - time_since_last_request)
    response = urllib.request.urlopen(url)
    return response.read()
# Initialize the time of the last request
last_request_time = time.time()
# Make API requests with rate limiting
for _ in range(10):  # Make 10 requests
    data = make_api_request_with_rate_limit(api_url)
    print(data)
# Update the time of the last request
last_request_time = time.time()

Заключение

Urllib – это универсальная библиотека на языке Python, позволяющая работать с URL-адресами, выполнять HTTP-запросы и эффективно взаимодействовать с веб-ресурсами. Если вы собираете данные с сайтов, взаимодействуете с API или загружаете файлы из Интернета,  эта библиотека вам точно пригодится. Познакомившись с ее модулями, вы сможете использовать всю ее мощь для решения задач, связанных с веб.

Перевод статьи «urllib in Python».

Сообщение Библиотека urllib в Python появились сначала на pythonturbo.


Source: pythonturbo.ru

NixOS 23.11 «Tapir» поставляется с Gnome 45, LLVM 16, поддержкой Wi-Fi 6 и многим другим.

НикОС

NixOS — это дистрибутив Linux, построенный на основе менеджера пакетов Nix. Он использует декларативную конфигурацию и позволяет надежно обновлять систему.

Об этом стало известно иВыпуск новой версии NixOS 23.11 с кодовым названием «Тапир» в котором приняли участие 2162 участника, авторы 40024 коммитов со времени предыдущей версии. Добавлено 9147 новых пакетов и 18700 обновленных пакетов в Nixpkgs. Пакеты 4015 также были удалены, чтобы обеспечить удобство обслуживания и безопасность набора пакетов, в дополнение к удалению 18 модулей и добавлению 113 новых.

Этот дистрибутив Linux Распространяется через две основные ветви— стабильная, актуальная и нестабильная версия после последней разработки.



Читать