Создание реактивных аналитических веб-приложений с использованием python и библиотеки dash
Содержание:
- Реальные примеры
- Делать сайты на Python перспективнее?
- Наука о данных и машинное обучение
- Создание скрипта скрапинга
- Как используется Python
- Подключаем Python к JS
- Бот лайкающий посты на сайте.
- Но есть нюанс…
- Easyocr
- Почему Python?
- Размещение Django сайта на Heroku
- Общие правила
- Python: основы и применение
- Other Useful Items
- Преимущества использования Python для веб-разработки
- Логика на Python
- Шаг 5 — Запуск сайта на реальном сервере
- Условные операторы
- Вступление
- Получение данных из форм
- Обработка Cookies
- Поиск сайта для скрапинга
- Документируйте свой путь на GitHub
Реальные примеры
Существует различные причины и варианты необходимости использования сбора (скрэпинга) данных в Интернете. Позвольте мне перечислить некоторые из них:
- сбор данных со страницы электронного магазина, чтобы определить имеется ли в наличии одежда, которую вы хотите купить, со скидкой
- сравнить цены нескольких брендов одежды, собирая данные о них с вэб-страниц
- стоимость авиабилетов может меняться несколько раз в течение дня. Можно сканировать веб-сайт и дождаться момента, когда цена будет снижена
- проанализировать веб-сайты, чтобы определить, должна ли быть стартовая стоимость продажи низкой или высокой, чтобы привлечь больше участников на аукцион или коррелирует ли длительность проведения аукциона с более высокой ценой конечной ценой продажи
Делать сайты на Python перспективнее?
Да. PHP ограничен одними сайтами и развивается в сторону веб (для чего он и был создан). Python в свою очередь, развивается в разные стороны, это даст вам шанс в будущем сменить свою работу и начать делать, например, программы вместо сайтов не меняя язык программирования. Вам не придется изучать опять новый язык программирования чтобы сменить род деятельности т.е. перескочить с сайтостроения на написание приложении для android, apple, symbian и т.д.
Еще один плюс в сторону Python в том, что он строго типизирован как и Java. Этот язык обучит вас хорошим манерам программиста и не даст волю творить хаос в коде. Но, не будем все обобщать, творить бессмыслицу можно и на Python и делать шедевры на том же PHP. Python научит разделать код на логические блоки чтобы понимать где зона выполнения цикла, где заканчивается один IF и начинается другой и т.д. На PHP тоже можно структурировать код на логические блоки, но там это не обязательно, следовательно новичок может написать код в одну строку и ему ничего не будет, в момент когда Python новичок получит ошибку и начнет править код.
Наука о данных и машинное обучение
Python хорошо подходит для манипулирования данными, анализа и реализации сложных алгоритмов. Синтаксический анализ и визуализация данных обычно представляют собой простые функции или несколько строк кода с библиотеками Python, такими как NumPy, scipy, scikit-learn и т.д.
Python можно использовать в приложениях с интенсивным использованием данных и машинном обучении, используя множество популярных библиотек, таких как:
- NumPy
- Pandas
- Matplotlib
- seaborn
Есть много инструментов глубокого обучения, которые поддерживают Python. Некоторые популярные библиотеки и фреймворки:
- TensorFlow
- PyTorch
- Keras
Еще одна причина, по которой Python популярна, заключается в том, что даже сложные модели машинного обучения могут быть реализованы с помощью 20-40 строк кода.
Создание скрипта скрапинга
В PyCharm (или другой IDE) добавим новый файл для кода, который будет отвечать за парсинг.
Копировать
Отрывок выше — это лишь начало кода. В первую очередь в верхней части файла выполняется импорт и Beautiful Soup. Затем в переменной сохраняется адрес страницы, с которой будет поступать информация. Эта переменная затем передается функции . Результат присваивается переменной . Дальше используем конструктор , чтобы поместить текст ответа в переменную . В качестве формата выберем . Наконец, выведем переменную. Результат должен выглядеть приблизительно вот так.
Вот что происходит: ПО заходит на сайт, считывает данные, получает исходный код — все по аналогии с ручным подходом. Единственное отличие в том, что в этот раз достаточно лишь одного клика.
Как используется Python
Его можно встретить в вебе и на мобильных устройствах, в приложениях и решениях, связанных с машинным обучением (нейросети и искусственный интеллект), а также в качестве встроенной системы.
Веб-разработка
Чаще всего Python используется в веб-разработке. Для работы с ним подключают фреймворки: Pyramid, Pylons, TurboGears, Flask, CherryPy и — самый популярный — Django.
Существуют и движки для создания сайтов на Python:
- Abilian SBE;
- Ella;
- Saleor;
- Wagtail;
- Django-CMS.
Также на Python пишут парсеры для сбора информации в интернете.
Программы
Хоть язык не компилируется, с помощью него создают десктопные программы. Вот, к примеру, что было разработано на Python:
- GIMP — визуальный редактор на Linux;
- Ubuntu Software Center — центр приложений в ОС Ubuntu (один из дистрибутивов Linux);
- BitTorrent до 6 версии — менеджер торрент-закачек (позже программу переписали на C++, но сети peer-to-peer всё ещё работают на Python);
- Blender — программа для создания 3D-графики.
Мобильные приложения
Мобильная разработка на Python менее популярна. Для Android чаще пишут на Java, C#, C++ или Kotlin, а для iOS — на Swift или Objective-C. На Python обычно программируют серверную часть приложения. Например, клиент Instagram для iOS написан на Objective-C, а сервер — на Python.
Игры
Многие компьютерные игры были полностью или частично написаны на Python. Существует заблуждение, что этот язык не подходит для серьёзных проектов, но на самом деле он использовался в разработке таких хитов, как:
- Battlefield 2;
- World of Tanks;
- Civilization IV;
- EVE Online.
Несмотря на возможность реализации пользовательского интерфейса и работы с графикой, на Python в основном пишут скрипты — например, взаимодействия персонажей, запуска сцен, а также обработки событий.
Встроенные системы (embedded systems)
На Python разрабатывают встроенные системы для различных устройств. Например, язык прижился в Raspberry Pi (компьютер размером с карту памяти) и в «Сбербанке» для управления банкоматами.
Еще проекты со встроенной системой на Python:
- The Owl Embedded Python System;
- Python Embedded Tools;
- Embedded Python.
Язык применяется во встроенных системах станков с ЧПУ, средствах автоматического регулирования (температуры, расхода жидкостей, давления и так далее) и в телекоммуникационном оборудовании.
Подключаем Python к JS
Теперь подключим нашу логику на Python к самому JS. Для этого примера я использую простую страничку, сверстанную чисто при помощи HTML, CSS (но вы можете подключить к своей страничке vue.js, react.js и другие популярные фреймворки, которые нужны вам для работы с графикой). Первым делом необходимо подключить библиотеку eel к самому JS:
Далее реализуем функционал кнопки “рассчитать”. По нажатию кнопки первым делом необходимо считать значение рублей и пойти по каждой валюте, чтобы перевести значение.
Обратите внимание на строку “let value_cur = await eel.convert_value_py(value_rub, «RUB», name_cur)();”
Важно, что вызов функции из питона происходит в асинхронном режиме, поэтому обязательно необходимо сделать асинхронной ту функцию, в которой есть вызов Python кода. При вызове функции из eel необходимо ставить пару (), где в первые круглые скобки будут передаваться наши аргументы
При вызове функции из eel необходимо ставить пару (), где в первые круглые скобки будут передаваться наши аргументы.
Проверим, работает ли.
Как мы видим, все работает.
Бот лайкающий посты на сайте.
Последовательность действий у нас следующая.
- Зайти на сайт under-prog.ru (открыть браузер)
- Пройтись по каждому из постов.
- Нажать кнопку лайк, если она не нажата.
- Закрыть браузер.
Первый пункт мы уже сделали, перейдем ко второму.
Пройтись по каждому из постов.
Зайдите на сайт, и нажмите кнопку F12.
У вас откроются инструменты разработчика. Изучив разметку, мы понимаем, что все посты находятся в теге article.
Сейчас нам нужно получить ссылку, на каждый пост. Для этого будем использовать этот css селектор.
Данный селектор указывает:
- На элемент с тегом a
- который находится находится внутри тега h2 с классом entry-title
- тот, в свою очередь, находится внутри тега header с классом entry-header
- тег header находится внутри тега div с классом blog-entry-content
- тот, находится в теге div
- тег div находится внутри тега article
Теперь, дополним бота.
Разберем новую функцию.
Данная функция ищет элементы по css селектору. В результате своей работы, она возвращает массив элементов.
В-общем, мы из этого массива, достали первый элемент, и при помощи функции get_attribute(), получили значение атрибута href (ссылка на пост).
И вывели его на экран.
Запустите скрипт, в консоли должна появится ссылка на первый пост.
Если закинуть массив элементов в цикл, то получится извлечь ссылки на все посты.
Отлично, ссылки на все посты получены, осталось всем этим постам, поставить лайк.
Нажать кнопку лайк, если она не нажата
Сначала перекопируем наши ссылки в отдельный массив. Замените это:
На это:
Далее напишем код, отвечающий за нажатие кнопки лайк.
Разберем данные строки.
Данная строка ищет кнопку с помощью css_селектора, и получает строку с названиями классов нашей кнопки.
Далее, при помощи функции find (стандартная функция python), мы получаем индекс подстроки ‘wp_ulike_btn_is_active‘, если не удалось найти подстроку, функция find возвращает -1, этим мы и воспользовались в нашем условии. Т.е. если атрибут ‘class‘ не содержит подстроку ‘wp_ulike_btn_is_active‘, то.
Кликаем по кнопке лайк.
Осталось закрыть браузер, делается это с помощью функции quit().
Бот завершен, запустите скрипт, и наслаждайтесь автоматизацией.
Но есть нюанс…
А если попробовать так?
Это серьёзная уязвимость, поэтому от неё нужно избавляться. Для этого нужно (в самом простом случае) экранировать все опасные символы. Это можно сделать с помощью функции escape из модуля html.
Перепишем form.py:
#!/usr/bin/env python3 import cgi import html form = cgi.FieldStorage() text1 = form.getfirst("TEXT_1", "не задано") text2 = form.getfirst("TEXT_2", "не задано") text1 = html.escape(text1) text2 = html.escape(text2) print("Content-type: text/html\n") print("""<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Обработка данных форм</title> </head> <body>""") print("<h1>Обработка данных форм!</h1>") print("<p>TEXT_1: {}</p>".format(text1)) print("<p>TEXT_2: {}</p>".format(text2)) print("""</body> </html>""")
Результат можете проверить сами.
Easyocr
Когда речь идет о распознавании текста в изображениях, первым делом разработчики вспоминают о pytesseract — питонячей обвязке OCR решения от Google. И Tesseract действительно неплохо справляется со своими обязанностями.
Если же у вас стоит задача распознавания отдельных надписей на фото, да еще и с небходимостью вычисления координат каждой надписи — стоит посмотреть в сторону easyocr.
Easyocr — решение на основе pytorch. Из коробки поддерживаются многие популярные языки и алфавиты. Ключевое отличие от tesseract — наличие метаданных о надписях на картинке: координаты и condifence rate на каждую надпись. Easyocr — хорошее решение для чтения номеров телефонов, названий компаний на вывесках, дорожных знаков и прочих коротких фрагментов текста.
Благодаря тому, что решение написано на pytorch, easyocr можно допиливать и модифицировать относительно малой кровью. Например, расширить поддержку некоторых языков, добавить распознавание хитрых кастомных шрифтов или улучшить поддержку чтения каких-то специфических фрагментов текста (например, номерных знаков).
В ответе видно координаты и confidence rate.
Почему Python?
Python является одним из наиболее динамично развивающихся языков программирования в мире благодаря своей простоте и универсальности. Он достаточно прост в изучении и понимании синтаксиса. При этом достаточно мощный по своим возможностям. На нем можно писать как простенькие скрипты, так и сложные приложения и даже некоторые виды игр. Еще одним плюсом языка Python является его кросс-платформенность, т.е. написанный код будет работать на любой операционной системе и на устройствах различного типа – от компьютера до смартфона. Главное – установить интерпретатор языка Python на устройство в нужной версии и можно выполнять код. Если вы новичок в программировании и разработке программного обеспечения, то изучение языка Python будет отличным вариантом для применения получаемых знаний на практике, а мощь и универсальность языка позволит легко переключаться между проектами различного назначения без необходимости кардинального переобучения.
Размещение Django сайта на Heroku
Последний шаг — это фактическое размещение кода на Heroku. Если вы раньше настраивали сервер, вы будете поражены тем, как сильно Heroku упрощает данный процесс.
Весь процесс будет состоять из следующих этапов:
- создайте новое приложение на Heroku и вставьте в него наш код;
- настройте взаимодействие с git, то есть так называемый «hook» для Heroku;
- настройте приложение на игнорирование статических файлов;
- для активации приложения в онлайн режим, запустите сервер Heroku;
- посетите приложение, перейдя по предоставленному Heroku URL адресу.
В качестве первого шага можем создать новое приложение Heroku. Для этого в командной строке наберите . Heroku создаст случайное имя для нашего приложения, в моем случае это . Ваше название будет другим.
Shell
(pages) $ heroku create
Creating app… done, ⬢ fathomless-hamlet-26076
https://fathomless-hamlet-26076.herokuapp.com/ |
https://git.heroku.com/fathomless-hamlet-26076.git
1 2 3 4 |
(pages)$heroku create Creating app…done,⬢fathomless-hamlet-26076 httpsfathomless-hamlet-26076.herokuapp.com| httpsgit.heroku.comfathomless-hamlet-26076.git |
На данный момент нам остается только настроить Heroku. Для этого укажем Heroku проигнорировать статические файлы вроде CSS и JavaScript, которые Django по умолчанию попытается исправить под себя. Выполним следующую команду:
Shell
(pages) $ heroku config:set DISABLE_COLLECTSTATIC=1
1 | (pages)$heroku configset DISABLE_COLLECTSTATIC=1 |
Теперь можем разместить код на Heroku.
Shell
(pages) $ git push heroku master
1 | (pages)$git push heroku master |
Если бы мы только что набрали , то код был бы загружен в GitHub, а не в Heroku. Добавление слова в команду позволяет отправить код на Heroku. Первые несколько раз это может сбивать с толку.
Наконец, нам нужно запустить в онлайн наше Heroku приложение. Поскольку трафик веб-сайтов растет, они нуждаются в дополнительных услугах от Heroku. Однако для нашего основного примера мы можем использовать самый низкий уровень , который является бесплатным.
Введите следующую команду.
Shell
(pages) $ heroku ps:scale web=1
1 | (pages)$heroku psscale web=1 |
Все готово! Последним шагом станет подтверждение того, что наше приложение действительно запущено и работает в режиме онлайн. Если вы выполните команду , ваш браузер откроет новую вкладку с URL адресом вашего приложения:
Shell
(pages) $ heroku open
1 | (pages)$heroku open |
Наш адрес . Вы можете убедиться в этом, вот появившаяся домашняя страница:
Домашняя страница на Heroku
Страница «About» также открылась должным образом:
Страница «About» на Heroku
Вам нет нужды разлогиниваться или покидать свое приложение в Heroku. Оно будет работать само по себе на этом бесплатном уровне.
Общие правила
- Перед началом скрэпинга проверьте, есть ли у вас возможность воспользоваться публичными API. Публичные API предоставляют более простой и быстрый (и законный) поиск данных, по сравнению с веб-скрэпингом. Посмотрите API Twitter, который предоставляет API для различных целей.
- Если вы скрэпите много данных, вы можете воспользоваться базой данных, чтобы иметь возможность быстро анализировать получать данные с Интернета. В этом руководстве описано, как создать локальную базу данных с помощью Python.
- Будьте вежливы, терпеливы и уважительны. Как следует из этого ответа, рекомендуется оповещать пользователей о том, что вы собираете данные с их веб-сайта, чтобы они могли лучше отреагировать на возможные проблемы, причиной которых может стать ваш бот.
Python: основы и применение
Предыдущий курс, конечно, хорош, но не предоставляет полную базу языка. Именно поэтому было создано продолжение под названием «Python: основы и применение». Именно здесь вы разберетесь с функциями более детально, а также войдете в мир ООП. Скажем честно, этот курс не такой энергичный, но материал изложен правильно и доступно. Задачи тоже присутствуют, кстати. Наш автор прошел оба этих курса, и именно они стали стартом его изучения языка Python.
Курс находится по этому адресу.
Оба курса записаны преподавателями института биоинформатики. Кстати, по окончанию обоих курсов, выдаются сертификаты. А при достаточном количестве баллов – еще и с отличием. Выглядят они примерно так:
У платформы stepik есть своё мобильное приложение, тоже бесплатное. А писать код можно прямо там. Так что, если у вас нет ПК, эти курсы станут отличным вариантом для старта, хоть и немного костыльным.
Даже если нет возможности смотреть видео-лекции, можно найти другой вариант:
Other Useful Items
- Looking for 3rd party Python modules? The
Package Index has many of them. - You can view the standard documentation
online, or you can download it
in HTML, PostScript, PDF and other formats. See the main
Documentation page. - Information on tools for unpacking archive files
provided on python.org is available. -
Tip: even if you download a ready-made binary for your
platform, it makes sense to also download the source.
This lets you browse the standard library (the subdirectory Lib)
and the standard collections of demos (Demo) and tools
(Tools) that come with it. There’s a lot you can learn from the
source! - There is also a collection of Emacs packages
that the Emacsing Pythoneer might find useful. This includes major
modes for editing Python, C, C++, Java, etc., Python debugger
interfaces and more. Most packages are compatible with Emacs and
XEmacs.
Преимущества использования Python для веб-разработки
Давайте начнем с основных преимуществ,
которые предлагает Python веб-разработчикам.
Простота использования
Одна из самых привлекательных черт
языка Python — невероятная простота
использования в веб-проектах. Дальше
мы расскажем, с чем это связано.
Легкость изучения
Этот язык программирования изучить не сложнее, чем самый обиходный английский. Простой синтаксис языка обеспечивает очень пологую кривую обучаемости.
Отлично подходит для
визуализации данных
Когда речь заходит о представлении
данных на сайте или в приложении, Python
просто потрясающе эффективен, и
разработчики не могли этого не оценить.
С его помощью можно легко создавать
простые и понятные отчеты и визуальные
представления данных.
Легкость чтения
Простой синтаксис Python обеспечивает
разработчикам отличную читаемость
кода. Благодаря этому разработчикам,
занятым в проекте, проще коммуницировать
и обмениваться знаниями.
Несравненная гибкость
Python это очень гибкий язык программирования. Он не замыкается в собственном мире и в процессе программирования способен смешиваться с разными языками, образуя новые реализации. Например, CPython — версия Python с C, IronPython создан для совместимости с .NET и C#, а проект PyObjc позволяет совместно использовать инструменты как Python, так и ObjectiveC. И это лишь несколько примеров.
Асинхронное программирование
Все мы знаем, что шаблоны асинхронного программирования помогают решать многие проблемы, с которыми время от времени сталкиваются разработчики. Python поддерживает асинхронный код. А когда разные части программы могут работать отдельно друг от друга, это помогает выявлять и решать возникающие проблемы гораздо быстрее.
Логика на Python
В качестве теста реализуем простое приложение конвертер валют (да-да, банально, никому не надо, на гитхабе миллион проектов). Для этого на python установим библиотеку CurrencyConverter:
Теперь приступим к написанию логики на python. Реализуем метод, который на вход будет принимать сумму, валюту с которой нам надо перевести и валюту, на которую нам надо перевести. Создадим “convert.py” в директории “back” и запишем в него следующий код:
Теперь в директории “middle” создадим файл “mid_convert.py” и пропишем следующий код:
Что здесь вообще происходит? Файл “mid_convert.py” будет служит связующим звеном между JS и Python. Декоратор @eel.expose дает нашей программе понять, что функция, описанная ниже, может быть вызвана из JS. Таким образом, любая функция, которую мы в будущем захотим вызывать из JS, должна быть обернута декоратором @eel.expose. Очевидно, что не имеет смысла делать лишних модулей, если у вас простой проект, можно было обернуть декоратором функцию “convert_value” в модуле “convert.py”. В больших проектах разбиение программы на такие слои позволит легче расширять и оптимизировать код.
Шаг 5 — Запуск сайта на реальном сервере
Так, давайте вернемся в нашему сайту. Запустить сайт на Python не так просто, как c HTML и PHP файлами, когда мы перетаскиваем и загружаем файлы при помощи FTP-клиента. Нам нужно делать всё по порядку, будьте терпеливы и внимательно выполняйте каждый шаг.
Шаг 5.1 — Создаем аккаунт Heroku
Создайте аккаунт на Heroku, перейдя по этой ссылке.
Шаг 5.2 — Устанавливаем необходимый инструменты
Прежде всего это , мы будем использовать git для загрузки файлов на сервер. А чтобы установить git, откройте командную строку и введите следующее:
sudo apt install git-all
git config --global user.name "John Doe"git config --global user.email johndoe@example.com
Далее следует, это такой собственный git для Heroku. Для установки:
sudo snap install --classic heroku
Отлично. Теперь у нас есть всё, что нужно. Поехали дальше.
Шаг 5.3 — Настройка Heroku через командную строку
Нужно установить Heroku туда же, где находится наше приложение. Давайте перейдем в папку с нашим основным скриптом, и зайдем в аккаунт Heroku, используя наши данные. Вас попросят нажать любую клавишу для входа и перенаправят в браузер. После того ,как вы успешно вошли, ваша командная строка будет выглядеть так:
Нажмите любую кнопку
Теперь нам нужно создать наше приложение. Хорошо подумайте над его названием, потому что это будет ваше доменное имя после herokuapp.com. Например, . Я хотел использовать своё имя, но такое название было уже занято. Поэтому я выбрал .
Шаг 5.4 — Создаем необходимые файлы (всего 3)
requirements.txt — Содержит список зависимостей (библиотек), которые Heroku должен установить, чтобы наше приложение работало правильно. Для этого, переходим в виртуальную среду, которую мы создали ранее, с помощью pip устанавливаем. Это веб-сервер Python. После этого напишите , чтобы увидеть список зависимостей, а потом , чтобы создать текстовый файл с этим списком. Это нам и нужно. Вы можете найти файл в вашей папке, переместите его туда, где находится наш файл Python.
Список зависимостей
Важное примечание — Пожалуйста, удостоверьтесь, что ваш файл requirements выглядит, как представленный ниже. Иначе Heroku не примет его и выдаст ошибку
Отредактируйте файл, чтобы он выглядел так.
requirements.txt
Procfile — У этого файла нет расширения. Он содержит имя сервера и название приложения. Создайте файл, назовите его и напишите в нем следующее:
web: gunicorn mainscript:app
Здесь, gunicorn — это используемый сервер. — это название файла Python, — это название приложения, которое мы придумали при создании экземпляра класса flask (смотри фрагмент кода в шаге 2). Если ваши названия отличаются, измените их.
runtime.txt — Содержит информацию о версии Python, которую вы хотите использовать. В этом файле напишите:
python-3.7.0
Я использую Python 3.x, поэтому я использовал эту среду. Если вы используете Python 2.x, укажите вместо этого. Отлично, все готово. Теперь нам нужно просто всё загрузить.
Наконец, всё, что нам нужно, в одном месте
Шаг 5.5 — Загрузка всего необходимого
Отлично. Чтобы не объяснять всё по отдельности, к каждой строке дам комментарий. Каждую строку нужно выполнять отдельно.
#Убедитесь, что находитесь в той же директории, где лежит ваш файл Python#Убедитесь, что вы залогинены в heroku#Вызовите свое приложениеheroku git:remote --app dhrumilp#Инициализируйте git, чтобы загрузить все файлыgit init#Добавьте все файлы (это точка в конце, что означает все)git add .#Теперь, зафиксируйте все добавленные файлы на серверgit commit -m "First upload"#Запушьте все в master branchgit push heroku master
Загрузка…
Готово.
Всё готов. Уфф. Поздравляю, если вы смогли добраться до этого этапа. Моё приложение доступно на dhrumilp.herokuapp.com, можете посмотреть.
Условные операторы
Python поддерживает дополнительный метод принятия решений, называемую условным выражением. (Он также упоминается как условный оператор или тернарный оператор в различных местах документации Python).
В своей простейшей форме синтаксис условного выражения выглядит следующим образом:
<expr1> if <conditional_expr> else <expr2>
Это отличается от форм операторов , перечисленных выше, потому что это не управляющая структура направляет поток выполнения программы. Он действует скорее как оператор, определяющий выражение. В приведенном выше примере сначала вычисляется . Если истина, то выражение вычисляется как . Если ложь, то выражение вычисляется как .
Обратите внимание на не очевидный порядок: сначала вычисляется среднее выражение, и на основе этого результата возвращается одно из выражений на концах. Вот несколько примеров, которые, надеюсь, помогут прояснить ситуацию:
raining = False print("Let's go to the", 'beach' if not raining else 'library') raining = True print("Let's go to the", 'beach' if not raining else 'library') age = 12 s = 'minor' if age < 21 else 'adult' s 'yes' if ('qux' in ) else 'no'
Примечание: условное выражение Python аналогично синтаксису ? : , используемому многими другими языками-C, Perl и Java. На самом деле, оператор ?: обычно называют тернарным оператором в этих языках, что, вероятно, является причиной того, что условное выражение Python иногда называют тернарным оператором Python.
Обычно условное выражение используется для выбора назначения переменной. Например, предположим, что вы хотите найти большее из двух чисел. Конечно, есть встроенная функция max (), которая делает именно это (и многое другое), что вы могли бы использовать. Но предположим, вы хотите написать свой собственный код с нуля.
Вы можете использовать стандартный оператор с предложением :
if a > b: m = a else: m = b
Но условный оператор короче и, возможно, более читабельнее:
m = a if a > b else b
Не забывайте, что условное выражение ведет себя как синтаксическое выражение. Его можно использовать как часть более длинного выражения. Условное выражение имеет более низкий приоритет, чем практически все остальные операторы, поэтому для его группировки необходимы круглые скобки.
В следующем примере оператор + связывается более плотно, чем условное выражение, поэтому сначала вычисляются +x и y + 2, а затем условное выражение. Скобки во втором случае не нужны и результат не меняется:
x = y = 40 z = 1 + x if x > y else y + 2 z z = (1 + x) if x > y else (y + 2) z
Если вы хотите, чтобы условное выражение было вычислено первым, вам нужно окружить его группирующими скобками. В следующем примере сначала вычисляется (x, если x > y, иначе y). В результате получается y, который равен 40, поэтому присваивается z 1 + 40 + 2 = 43:
x = y = 40 z = 1 + (x if x > y else y) + 2 z
Если вы используете условное выражение как часть более крупного выражения, вероятно, будет хорошей идеей использовать группирующие скобки для уточнения, даже если они не нужны.
Условные выражения также используют оценку короткого замыкания, как и составные логические выражения. Части условного выражения не вычисляются, если в этом нет необходимости.
В выражении , если иначе :
Если <conditional_expr> правда, <expr1> и <expr2> не вычисляется.
Если <conditional_expr> имеет значение false, то возвращается <expr2> и <expr1> не вычисляется.
Вы можете проверить это, используя термины, которые вызвали бы ошибку:
'foo' if True else 1/0 1/0 if False else 'bar'
В обоих случаях условия 1/0 не оцениваются, поэтому никаких исключений не возникнет.
Условные выражения также могут быть объединены вместе, как своего рода альтернативная структура , как показано здесь:
s = ('foo' if (x == 1) else 'bar' if (x == 2) else 'baz' if (x == 3) else 'qux' if (x == 4) else 'quux' ) s
Неясно, имеет ли это какое-либо существенное преимущество перед соответствующим оператором , но это синтаксически правильно для Python.
Вступление
Тема красивых интерфейсов была и будет актуальна всегда, кто-то использует для создания графических приложений C#, кто-то использует Java, кто-то уходит в дебри C++, ну а кто-то извращается с Python, используя tkinter или PyQT. Существуют различные технологии, позволяющие совмещать красоту графических дизайнов, создаваемых на HTML, CSS и JS с гибкостью в реализации логики приложения, которую может дать другой язык. Так вот, для тех, кто пишет на самом лучшем языке программирования Python, есть возможность писать красивые интерфейсы на HTML, CSS и JS и прикручивать к ним логику на Python.
В этой статья я хочу показать на небольшом примере, как же все таки создать простое и красивое десктопное приложение на HTML, CSS, JS и Python. В качестве библиотеки для связи всех компонентов будем использовать EEL.
Получение данных из форм
Итак, во-первых разберёмся с формами. В модуле CGI есть полезный класс: FieldStorage, который содержит в себе переданную в форме информацию. По сути дела этот класс представляет из себя словарь, обладающий теми же свойствами, что и обычный словарь в python.
У класса FieldStorage есть 2 метода получения значений данных формы:
FieldStorage.getfirst(name, default=None) — всегда возвращает только одно значение, связанное с именем поля формы. Метод возвращает только первое значение в том случае, если нехороший пользователь послал более одного значения
Обратите внимание, что порядок, в котором будут получены значения, могут отличаться от браузера к браузеру. Если нет такого поля формы или значение не существует, то метод возвращает default
FieldStorage.getlist(name) — возвращает список значений, связанных с именем поля формы.
Разберём на примере: создадим в нашей папке файл index.html со следующим содержимым (это будет наша форма, данные из которой мы будем обрабатывать):
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Обработка данных форм</title> </head> <body> <form action="/cgi-bin/form.py"> <input type="text" name="TEXT_1"> <input type="text" name="TEXT_2"> <input type="submit"> </form> </body> </html>
А в папке cgi-bin/ — файл form.py (обработчик формы)
#!/usr/bin/env python3 import cgi form = cgi.FieldStorage() text1 = form.getfirst("TEXT_1", "не задано") text2 = form.getfirst("TEXT_2", "не задано") print("Content-type: text/html\n") print("""<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Обработка данных форм</title> </head> <body>""") print("<h1>Обработка данных форм!</h1>") print("<p>TEXT_1: {}</p>".format(text1)) print("<p>TEXT_2: {}</p>".format(text2)) print("""</body> </html>""")
Попробуем это в действии (кто сидит на linux, не забудьте поставить права на выполнение).
Запускаем локальный сервер, и переходим на localhost:8000:
Обработка Cookies
Теперь научимся получать cookies. Они передаются на сервер и доступны в переменной os.environ (словарь, cookies хранятся по ключу HTTP_COOKIE). Они передаются в виде пар ключ=значение, что не очень удобно при обработке. Для упрощения работы можно использовать модуль http.cookies.
Напишем простой скрипт (/cgi-bin/cookie.py), проверяющий, установлена ли кука, и если нет, устанавливает:
#!/usr/bin/env python3 import os import http.cookies cookie = http.cookies.SimpleCookie(os.environ.get("HTTP_COOKIE")) name = cookie.get("name") if name is None print("Set-cookie: name=value") print("Content-type: text/html\n") print("Cookies!!!") else print("Content-type: text/html\n") print("Cookies:") print(name.value)
Так страница выглядит после первого запроса:
И после обновления страницы:
Не следует хранить в cookies важные данные, и не полагайтесь на выставленный вами срок хранения. Cookies можно удалить или изменить вручную в браузере.
Поиск сайта для скрапинга
Для знакомства с процессом скрапинга можно воспользоваться сайтом https://quotes.toscrape.com/, который, похоже, был создан для этих целей.
Из него можно было бы создать, например, хранилище имен авторов, тегов или самих цитат. Но как это сделать? Сперва нужно изучить исходный код страницы. Это те данные, которые возвращаются в ответ на запрос. В современных браузерах этот код можно посмотреть, кликнув правой кнопкой на странице и нажав «Просмотр кода страницы».
На экране будет выведена сырая HTML-разметка страница. Например, такая:
На этом примере можно увидеть, что разметка включает массу на первый взгляд перемешенных данных. Задача веб-скрапинга — получение доступа к тем частям страницы, которые нужны. Многие разработчики используют для этого, но библиотека Beautiful Soup в Python — более дружелюбный способ извлечения необходимой информации.
Документируйте свой путь на GitHub
Это одна из самых важных вещей, которую должен начинать каждый программист,GitHubэто как резюме для программистов, потому что оно говорит и показывает вашу работу. Поэтому убедитесь, что вы создаете GitHub-репозиторий в тот момент, когда вы учитесь программировать. Попытайтесь предоставить хороший файл read.me (файл Read.me — это файл описания, в котором рассказывается о вашем хранилище — не беспокойтесь, что вы привыкнете к нему при его использовании), и обновляйте его. Кто знает, кто может читать ваш GitHub Repository, и, возможно, иногда они нанимают вас для работы на них. Если вы не знаете, как создавать и работать с GitHub, посмотрите видео ниже:
Кредиты:MicrowaveSam
Как вы теперь заметили, вы сознательно или неосознанно достигли конца моего урока (проверьте блок-схему в начале). Теперь я старался изо всех сил, чтобы дать вам, ребята, все ресурсы, инструменты и рекомендации, мяч на вашем поле, чтобы решить, что вы хотите с ним делать Теперь, если вы, ребята, хотите увидеть мой репозиторий GitHub и узнать что-то новое из него, пожалуйста, смотрите ниже:
Спасибо, ребята, что читаете мою статью. Если у вас есть какие-либо сомнения относительно чего-либо, Python просто сообщите мне через раздел комментариев, я отвечу на это в течение нескольких минут или не лет (шучу). Хорошо, поставь педаль на металл и запрограммируй. Увидимся, хорошего дня.
Кредиты:Giphy