Сообщество - Life-Hack [Жизнь-Взлом]/Хакинг

Life-Hack [Жизнь-Взлом]/Хакинг

272 поста 2 789 подписчиков

Популярные теги в сообществе:

6

10 лучших инструментов для тестирования безопасности сайта на WordPress

10 лучших инструментов для тестирования безопасности сайта на WordPress Информационная безопасность, IT, Wordpress, Сайт, Подборка, Полезные сайты, Рекомендации, Хакеры, Взлом

WordPress - наиболее популярная платформа для создания веб-сайтов, однако ее популярность делает ее привлекательной целью для хакеров. Эффективное тестирование безопасности является ключом к защите вашего ресурса. Представляем топ-10 инструментов для аудита безопасности сайтов на WordPress.

1. Wordfence Security - мощный плагин безопасности, предлагающий функции сканирования на уязвимости, защиту от взлома и мониторинг трафика в реальном времени.

2. Sucuri Security - обеспечивает комплексное сканирование сайта на наличие вредоносного кода и уязвимостей, предлагает услуги по удалению вредоносного ПО и защиту от DDoS-атак.

3. iThemes Security - предлагает более 30 способов защиты сайта, включая двухфакторную аутентификацию и защиту от силовых атак.

4. All In One WP Security & Firewall - обладает удобным интерфейсом и предоставляет функции для повышения безопасности без замедления работы сайта.

5. BulletProof Security - защищает веб-сайты WordPress от более 100 000 известных уязвимостей, включая XSS, CSRF и SQL-инъекции.

6. WPScan - консольный инструмент, предназначенный для сканирования сайтов на WordPress в поисках уязвимостей. Его база данных содержит информацию о более чем 21 000 плагинов и тем.

7. Quttera Web Malware Scanner - проверяет сайт на ниличие обфускацит кода JS, эксплойтов, вредоносных iframe, инъекций вредоносного кода, обфускация вредоносного кода и т. д.

8. MalCare - определяет и удаляет вредоносный код без замедления работы сайта благодаря его уникальному алгоритму сканирования.

9. Astra Security Suite - предлагает полный спектр защиты сайтов на WordPress от взлома, включая брандмауэр, мониторинг безопасности и удаление вредоносного ПО.

10. Hide My WP - помогает скрыть факт использования WordPress как основы для сайта, тем самым уменьшая вероятность атак.

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

Наш канал по информационной безопасности в телеграме, подпишись!

Показать полностью
6

Открытый код. Сокрытие данных

Введение

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

Мы в телеграме!

QR-FILE-SHARE

Что это?

Скрипт для того чтобы делиться небольшими файлами из офлайн-источника используя лишь QR-код. Так устроен этот скрипт, что файл живёт внутри самого кода и благодаря этому можно передавать небольшие файлы(к примеру текстовые) прям по самому коду.

Для чего может пригодиться?

На первый взгляд может показаться что затея такая себе и ничем особо не поможет, но советую думать шире, ведь в небольшой текстовой файл можно уместить не маленькое количество информации или же вообще какой-либо сценарий скриптов. Единственный минус, к сожалению в GitHub инструмента не указано сколько максимум позволено весить файлу при таком раскладе.

Установка и использование

Ну здесь всё по-старинке, берём клонируем репозиторий, устанавливаем модули и запускаем.

`git clone https://github.com/dupontgu/qr-file-share`

`cd qr-file-share`

`pip install -r requirements.txt`

Далее запускаем наш скрипт с единственным аргументом который заключается в названии самого файла. Для этого я создал тестовый файл в той же директории под названием text.txt.

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Сам файл так же можно скачать из ссылки которую нам показывают в выводе. А QR-код сохранился под названиефайла_qr.png. Можем его открыть и отсканить.

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Hyperbacked

Что это?

Это программа на чистом Rust, способная надёжно хранить твои секреты. Она использует доступные для печати PDF-файлы, содержащие зашифрованные QR-коды. Если QR-код сканировать с обычного устройства, то оно ничего толком прочитать не сможет, поскольку послание зашифровано будет. Для того чтобы прочитать послание, необходимо будет в программе ввести пароль и отсканировать код, и только тогда вы получите скрытое послание.

Для чего может пригодиться?

Ну здесь можно весьма изобретательно подойти, тем самым зашифровать пароль или парольную фразу, или любые данные в виде текста которые вы хотите надёжно передать другому человеку(токены, пароли, адреса криптокошельков). Довольно интересное и необычное решение.

Установка и использование

Для начала клонируем репозиторий, после чего устанавливаем Rust.

`git clone https://github.com/Twometer/hyperbacked`

`cd hyperbacked`

`apt install rustup`

Устанавливаем стабильную версию компилятора Rust:

`rustup default stable`

Теперь запускаем нашу программу:

`cargo run`

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Ну здесь интерфейс хоть и на английском, но интуитивно понятен и прост, сейчас объясню вам пошагово, как и где всё делается и настраивается.

Первым делом для того чтобы зашифровать нам нашу фразу заходим в Create backup.

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Ну вот здесь детально, то что обведено красным, это условно хеш, токен, пароль или что-то ещё секретное что мы собственно и хотим передать. То что обведено зелёным, это пароль которым мы будем шифровать наш QR-код, ну а то что обведено фиолетовым просто название QR-кода. Ну и собственно после всего что мы заполнили, можем нажимать Encrypt.

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Ну теперь выбираем пункт Save и собственно выбираем где сохраним наш PDF. Далее конечный файл будет выглядеть следующим образом:

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Мы можем отсканировать QR-код и убедиться что послание мы действительно просто так не получим, для этого заходим снова в меню нашей проги, и в этот раз выбираем пункт Restore Backup.

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Вводим наш пароль и нажимаем Scan code для того чтобы с вебки отсканить наш код, ну и далее получаем наше скрытое послание.

SecretPixel

Что это?

Инструмент стеганографии, для сокрытия конфиденциальной информации внутри изображений. Поддерживает шифрование при помощи AES-256 и RSA, написан на Python и поддерживает форматы изображений такие как: PNG, BMP, TGA и TIFF.

Для чего нужен?

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

Установка и использование

Давайте представим ситуацию что к примеру на рабочем столе у нас имеется файл с тренерами от различных сервисов, которые мы используем в нашей работе и для создания скриптов и т.п. Разумеется мы не заинтересованы в том, чтобы кто-то случайно нашёл этот файл и быстренько так понял что к чему, тем самым завладев нашими справедливо-заработанными токенами. Ну или же нам нужно передать кому-то файл с токенами, но чтобы это выглядело так,что мы просто обмениваемся безобидными мемами. И нам нужно всё это дело спрятать.

Здесь всё по стандарту, клонируем репозиторий, устанавливаем необходимые модули.

git clone https://github.com/x011/SecretPixel

cd SecretPixel

pip install -r requirements.txt

Ну а далее генерим открытый и закрытый ключи при помощи скрипта generate_keys.py:

python generate_keys.py

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Задаём парольную фразу и воаля, у нас уже готовы файлы при помощи которых будем скрывать информацию.

Давайте сокроем в изображении host.png текстовой файл secret.txt со следующим содержимым:

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Это мы сделаем при помощи скрипта secret_pixel.py следующим образом:

python secret_pixel.py hide host.png secret.txt mypublickey.pem 1.png

Используем для этого наш публичный ключ и выходное изображение будет называться 1.png. И давайте тем же скриптом расшифруем при помощи приватного ключа:

Открытый код. Сокрытие данных Информационная безопасность, IT, Osint, Открытый код, Рекомендации, Шифрование, Интернет, Длиннопост

Как видим всё успешно и файл наш в целости и сохранности.

Итоги

Сегодня рассмотрели с вами различные интересные решения сокрытия важной информации в файлах, картинках, QR-кодах. Все эти способы никто не мешает автоматизировать, совмещать и придумывать действительно изобретательные и интересные пути, всё только в вашей голове.


Подпишись на наш канал в телеграме, там много полезного!

Показать полностью 10
4

Безопасный онлайнбанкинг. 5 советов по защите банковской карты от взлома при покупках в Интернете

Безопасный онлайнбанкинг. 5 советов по защите банковской карты от взлома при покупках в Интернете Информационная безопасность, IT, Рекомендации, Совет, Защита, Банковская карта, Сайт, Полезное, Cvc, Cvv, Безопасность, Банк, Хакеры, Взлом

Наш канал по информационной безопасности в телеграме, подпишись!

Надежный и неизвестный никому пароль к банковскому аккаунту - это главное условие безопасности при онлайн-платежах. Однако есть еще несколько важных правил, о которых следует помнить, если вы хотите избежать взлома банковской карты при совершении финансовых транзакций в Интернете.

1. Внимательно изучайте сайт и его URL-адрес

При каждом посещении сайта банка вы должны убедиться, что находитесь именно на его официальном веб-ресурсе. Если вы не знаете точный сетевой адрес своего банка, то внимательно ищите его в поисковике. Некоторые поисковые системы, в целях отсечения вредоносных гиперссылок, помечают настоящий сайт специальным значком. Например, Яндекс помечает подлинный веб-сайт кредитной организации галочкой в синем кружочке. Всегда обращайте пристальное внимание на URL-адрес. Если страница очень похожа на настоящую, но адрес неверен, то вам следует покинуть ресурс. Например, адрес официального сайта условного банка ОТБ может отличаться от поддельного доменной зоной (настоящий сайт банка - https://www.otb ru, поддельный - https://www.otb com).

2. Убедитесь, что у вас безопасное соединение

Старайтесь вводить интернет-адрес своего банка самостоятельно и всегда внимательно следите за адресной строкой в браузере. Она всегда должна начинаться с «https» - протокола с шифрованием SSL. О безопасности ресурса будет свидетельствовать значок замка слева от URL-адреса. Если он закрыт, то ваше соединение защищено. Если значок перечеркнут, то соединение с таким сайтом может прослушиваться хакерами.

3. Не используйте общественные Wi-Fi-сети при совершении покупок

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

4. Не открывайте вложения, присланные вам с незнакомых электронных почтовых ящиков

Для осуществления незаконных транзакций с вашей карты хакерам требуется полный номер банковской карты, трехзначный код проверки карты (CVV, CVC и т.д.) и дата истечения ее срока действия. Чтобы получить данную информацию, хакеры рассылают фишинговые электронные письма. В целях защиты от злоумышленников не отвечайте на письма, в которых содержится просьба о предоставлении конфиденциальной информации. Не используйте гиперссылки, содержащиеся в таких сообщениях, так как переход по ним может привести к заражению вашего устройства, с которого осуществляется управление банковским аккаунтом.

5. Делайте покупки только в проверенных интернет-магазинах

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

Наш канал по информационной безопасности в телеграме, подпишись!

Показать полностью
22

Простой способ извлечения изображений из документов MS и Libre Office

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Стандарт Open Document стал де-факто уже давно. И если раньше формат документов Microsoft Office был проприетарным, то теперь он представляет собой «.zip»-файл в котором храниться множество «.xml», а также изображения и прочие файлы. Конечно же, самым простым способом извлечь документы является изменение расширения документа на «.zip» и последующее извлечение файлов любым архиватором. Но, если вам нужно сделать это не с одним документом, это может быть достаточно продолжительно по времени. Поэтому, давайте рассмотрим несколько способов, с помощью которых можно извлечь изображения из файлов формата ".docx", ".xlsx", ".pptx", ".odp", ".ods", ".odt".

Способ №1: используем стандартные библиотеки python

Для данного способа не требуется установка сторонних библиотек. Достаточно тех, что поставляются в комплекте с самим интерпретатором.

Создадим файл extract.py.

Импортируем нужные нам в процессе работы библиотеки:

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Создадим функцию image_extract(in_zip: zipfile, out_dir: Path), в которую будем передавать zip-файл, а также путь к директории в которую будут распакованы изображения. В данном случае путь у пользователя запрашиваться не будет.

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

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Осталось дело за малым, запросить у пользователя путь к файлу, проверить, является ли он файлом и имеет ли нужный формат. После чего скопировать файл с расширением «.zip», открыть с помощью zipfile и передать в функцию для поиска изображений и их распаковки. Ну и напоследок удалить скопированный zip-файл.

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

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Полный код скрипта:

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Протестируем созданный скрипт. У нас есть, для примера документ «CustomTkinter.docx». В нем содержаться несколько изображений. Вот их мы и попробуем извлечь.

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

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Способ №2: используем библиотеку docx2txt

Создадим файл docx2im.py. В данном случае мы будем использовать стороннюю библиотеку docx2txt. Для ее установки пишем в терминале или командной строке:

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

Теперь импортируем нужные библиотеки в скрипт.

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

В данном случае нам не понадобиться создавать дополнительных функций. Сделаем все в одной. Хотя, в теории, можно было бы разделить извлечение изображений и текста. Да, дополнительным бонусом, при том, что извлекаются изображения только из документов «.docx», является извлечение текста.

Для начала запросим у пользователя путь к документу и путь к папке для извлечения изображений. Проверим, является ли переданный параметр путем к документу и является ли расширение данного документа «.docx». Затем проверим, существует ли директория для извлечения изображений. Если нет, создадим ее, так как docx2txt ее самостоятельно не создает.

Теперь передаем путь к документу и путь для извлечения изображений в функцию process данной библиотеки. Из нее будет возвращен текст документа. Проверим, содержится ли в переменной text что-нибудь. Для этого обрежем пробелы и знаки переноса каретки, так как, если в документе нет текста, но есть пустая строка, переменна text не будет пуста.

Затем открываем текстовый документ на запись и записываем в него полученный текст.

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

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

Думаю, что вышеприведенных скриптов будет достаточно. Можно использовать также библиотеку aspose-words, которая устанавливается с помощью команды:

pip install aspose-words

Однако, способ извлечения с ее помощью изображений не особо отличается от предыдущих. Создадим файл aspose_extract.py. Вот для примера код:

Простой способ извлечения изображений из документов MS и Libre Office IT, Гайд, Программирование, Разработка, Windows, Python, Рекомендации, Код, Программист, Длиннопост

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

А на этом все. Спасибо за внимание.

Надеюсь, данная информация будет вам полезна.

Код из статьи можно взять тут!

Показать полностью 9
4

Популярно о кибербезопасности. Что такое эксплойт нулевого дня?

Популярно о кибербезопасности. Что такое эксплойт нулевого дня? Информационная безопасность, Эксплойт, Уязвимость, Атака, Хакеры, Взлом

Простым языком и общими фразами!

Одной из опаснейших современных вредоносных программ является эксплойт нулевого дня. Это особая форма вредоносного кода, использующая уязвимости, о которых разработчик программного обеспечения не знает. Такие «дыры» в программном коде называются уязвимостями нулевого дня.

Для чего разрабатывается эксплойт?

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

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

  • Предлагать эксплойт производителям уязвимого программного обеспечения. Приобретая эксплойт нулевого дня разработчики защищают репутацию компании и свои продукты до атаки.

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

В чем заключается особая опасность эксплойта?

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

Как происходит атака нулевого дня?

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

Рынок эксплойтов нулевого дня

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

Как защититься от эксплойта?

Поскольку уязвимость, эксплуатируемая вредоносным кодом, неизвестна, то защитить потенциально уязвимые системы очень трудно. Тем не менее, некоторые профилактические меры могут минимизировать риск возникновения атаки нулевого дня.

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

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

Наш телеграм канал по кибербезопасности, подписывайся!

Показать полностью
3

Получаем ip-адрес из requests (python)

Когда мы получаем какую-либо информацию о домене, в числе прочих параметров мы узнаем его ip-адрес. И получить его с помощью python не составляет большого труда. Однако давайте рассмотрим, как, не используя прямое обращение к сокету получить ip-адрес непосредственно из запроса.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Зачастую, чтобы получить ip-адрес мы используем socket. И в случае, когда нам требуется выполнение только данной операции этого вполне достаточно.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Но можно поступить несколько иначе, особенно если мы уже получаем какие-либо данные с сервера. Хотя бы те же заголовки. Давайте на примере посмотрим, как реализовать получение доступа к необработанному объекту сокета.

Установка необходимых библиотек

В данном случае нам понадобиться библиотека requests. Для ее установки пишем в терминале:

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Импорт библиотек в скрипт. Создание заголовков для запроса

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

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

После этого создадим словарь с заголовками содержащими «User-Agent» и «Accept». Их мы будем передавать в запрос в качестве параметра, чтобы изменить стандартные заголовки отправляемые python.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Получаем заголовки и ip-адрес

Создадим функцию get_domain_info(domain: str) -> (dict, bool), которая на входе будет получать домен, а возвращать заголовки отправленные сервером, а также ip-адрес домена.
Выполним запрос на получение заголовков, куда передадим адрес домена, заголовки. Укажем свойство allow_redirects = True. Это сделано для того, чтобы производилась переадресация. То есть, в данном случае мы делаем следующее: так как мы не знаем точного адреса сайта, доменное имя которого передано в функцию, поступим как браузер. Для начала пойдем по протоколу http. Если на сервере включена переадресация, то мы будем автоматически переадресованы на нужный адрес. Также, stream=True. Это необходимо для получения ip-адреса из запроса.

Обработаем исключение raise_for_status(), чтобы отсекать ненужные статус-коды. В случае же, когда код 200, получим ip и порт, которые возвращаются в кортеже при выполнении следующего кода: res.raw._connection.sock.getpeername(). Важно то, что эти данные необходимо получить в самом начале, до обработки остальных данных запроса, то есть в первую очередь. И уже после получим частично содержимое из заголовков отправленных сервером. Вернем пользователю словарь из полученных данных. В случае же неудачи или неверного статус-кода, вернем из функции False.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

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

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Здесь я не проверяю полученную информацию, так как данный код служит примером. Если вы попробуете получить ip-адрес с помощью socket, результат, зачастую, будет одинаковым. Однако, если вы увидите, что адреса различаются, то не считайте это ошибкой. Я проверял специально данные, получая информацию от DNS. Тут дело в том, что на одном домене может быть несколько NS-серверов. И в этом случае возвращается значение ближайшего. Ну или свободного. В данном случае механизм для меня пока еще не совсем понятен. Главное, что и тот, и тот адреса являются правильными.

Полный код скрипта

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост
Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Протестируем написанный код и получим заголовки и ip-адрес для домена python.org.

Получаем ip-адрес из requests (python) Python, IT, Программист, Разработка, Разработчики, Программирование, Рекомендации, Гайд, Домен, Код, Длиннопост

Результат работы скрипта

Как видим, скрипт отработал правильно и вернул ip-адрес, а также информацию из полученных заголовков.

А на этом, пожалуй, все.

Спасибо за внимание. Надеюсь, данная информация будет вам полезна!

Подписывайся на наши телеграм каналы! У нас много полезного!

Код скрипта можно забрать тут!

Показать полностью 9
9

Очистка текста с помощью Python. Часть 02

В предыдущей части статьи мы поговорили о том, как очистить текст от цифр и символов. Продолжим очищать данные и поговорим о том, как очистить цифры от букв и символов, а также выполнить проверку email. Также мы подсчитаем количество не пустых строк. В данном случае, строка будет пустой, если она содержит одно или менее значений. Ну и в завершении протестируем то, что у нас получилось.

Очистка текста с помощью Python. Часть 02 Гайд, IT, Python, Разработка, Программирование, Рекомендации, Длиннопост

Очистка строк от букв и символов

Если в предыдущей функции мы удаляли числа и символы, то сейчас нам нужно выполнить противоположную задачу. Например, нужно очистить номер телефона. И привести к какому-то одному виду для облегчения поиска. Чтобы информация не была неструктурированном и сыром виде. Создадим функцию phone_normalize(phone: str) -> str, которая на вход получает строку с номером телефона, очищает ее, приводит к требуемому виду и возвращает из функции. Для начала очистим строку с номером от скобок, кавычек и прочего. После проверим, не является ли строка пустой. Так как она может содержать не только номер телефона и потому будет просто очищена. Если номер есть, проверяем количество символов в нем. Для себя я определил, что если номер телефона, а речь идет о российских номерах, больше 11 символов, то такие номера учитывать не буду. Потому, проверяю, если больше, возвращаю пустую строку. Если количество символов в диапазоне от 6 до 10, проверяю, с какой цифры начинается номер. Если это девять, добавляю 7. Если нет, просто возвращаю номер. Если цифр 11, проверяю первую цифру. Если она 8, меняю на 7. Также здесь нужно учесть то, что не все 8 надо заменять. Потому, проверяем также вторую цифру. И если она девять, только тогда проводим замену. Ну и если номер начинается с 7, возвращаем его из функции как есть.

def phone_normalize(phone: str) -> str:
phone = "".join(x for x in phone if x.isdecimal())
if phone:
if len(phone) > 11:
return ""
elif 6 <= len(phone) < 10:
return phone
elif len(phone) == 10:
if phone.startswith("9"):
return f"7{phone}"
else:
return phone
elif len(phone) == 11:
if phone.startswith("8") and phone[1] == "9":
return f"7{phone[1:]}"
elif phone.startswith("7"):
return phone
else:
return ""
return ""
return ""

Очистка и проверка email

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

def email_normalize(mail: str) -> str:
return mail.strip().replace("/", ".") if "@" in mail else ""

Подсчет количества не пустых строк

В принципе, данная функция вовсе не обязательна и нужна только в примере, который я вам хочу здесь показать. Тем не менее, для полноты картины ее нужно создать. Здесь все просто. Перебираем объекты в списке. И если они не пустые, увеличиваем счетчик. Затем, если счетчик больше 1, возвращаем True, меньше False.

def count_get(items: list) -> bool:
cnt = 0
for item in items:
if item.strip():
cnt += 1
return True if cnt > 1 else False

Проверка функций очистки на примере файла «csv»

Давайте проверим, как работают созданные функции. Загрузим файл «.csv» и обчистим его с помощью них. Ну и запишем результат в отдельный файл.

Для этого нужно написать обработчик строк, который бы открывал файл, считывал его построчно и очищал.

Создадим функцию read_files(file: str, name: str, ascii_l=True) -> None. На входе она получает путь к «.csv» файлу, имя файла очищенное от расширения и параметр ascii_l со значением по умолчанию. Он нужен для того, чтобы сказать функции, стоит ли обрабатывать английские символы или нет. Ведь не всегда имена написаны по-русски.

Для начала откроем файл «.csv». В цикле будем итерироваться по строкам. В моем файле разделителем является «|». Если у вас что-то другое, запятая или точка с запятой, следует указать их. Проверяем первую строку. У меня она содержит заголовки. Потому их я сразу же добавляю в глобальный, предварительно объявленный, список.

Обратите внимание на то, что в данном случае структура файла нам известна заранее, а следовательно мы можем определить переменные.

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

Распаковываем строку. Нормализуем Ф.И.О., email, телефон и имя пользователя. Также проверяем длину имени пользователя. Затем проверяем количество не пустых переменных. И если оно больше 1, то добавляем список в глобальный список rows_list. Выводим на печать полученные значения, чтобы не было скучно.

def read_files(file: str, name: str, ascii_l=True) -> None:
global rows_list
with open(file, "r", encoding="utf-8") as cs:
for nm, row in enumerate(csv.reader(cs, delimiter="|")):
if nm == 0:
rows_list.append(row)
continue
phone, email, fio, uname = row
fio = fio_normalize(fio, ascii_l)
email = email_normalize(email)
phone = phone_normalize(phone)
uname = uname.encode().decode()
if len(uname) > 50:
uname = ""
if count_get([phone, email, fio, uname]):
rows_list.append([phone, email, fio, uname])
else:
continue
print(f"\r{nm+1} | {fio} | {phone} | {email} | {uname}", end="")
if len(rows_list) == 100000:
with open(f"{name}_clean.csv", mode="a", encoding='utf-8', newline='') as csv_f:
file_writer = csv.writer(csv_f, delimiter=";")
file_writer.writerows(rows_list)
rows_list.clear()

Записывать большие файлы лучше по частям. Потому, проверяем количество списков в глобальном списке. И если оно равно 100 000, записываем в файл. После чего глобальный список очищаем для новой порции.

Запрос пути к файлу. Функция main

Итак, мы приближаемся к финалу данной статьи. Создадим функцию main. Запрашиваем у пользователя путь к файлу. Также запрашиваем выполнять транслитерацию или нет. В данном случае я опустил уточняющие запросы вроде да или нет. Так как в данном случае да уже по умолчанию. А нет равно вводу «n». Проверяем существует ли файл, и что это вообще файл. Следовало бы проверить, является ли он «.csv» хотя бы по расширению. Если файла не существует, выходим из скрипта. Если же все в порядке – двигаемся дальше. Замерим также время выполнения скрипта.

Получаем имя файла без расширения. Подсчитываем кол-во строк в файле и выводим его имя и кол-во в сообщении для пользователя. Проверяем нужно ли выполнять транслитерацию. Ну и передаем путь к файлу в функцию очистки. После отработки скрипта проверяем, не пуст ли глобальный список. Если нет, сохраняем остатки данных в новый файл «.csv». Выводим в терминал время выполнения скрипта.

def main() -> None:
global rows_list
path = input("path file: >>> ")
ascii_l = input("ascii_l: >>> ")
if not Path(path).exists() or not path or not Path(path).is_file():
exit(0)
tm = time.monotonic()
name = Path(path).name.removesuffix(Path(path).suffix)
cnt_line = sum(1 for _ in open(path, "rb"))
print(f"\n{Path(path).name} | Lines: {cnt_line}\n{'*' * 35}")
if ascii_l == "n":
read_files(path, name, ascii_l=False)
else:
read_files(path, name, ascii_l=True)

if 0 < len(rows_list) < 100000:
with open(f"{name}_clean.csv", mode="a", encoding='utf-8', newline='') as csv_f:
file_writer = csv.writer(csv_f, delimiter=";")
file_writer.writerows(rows_list)
rows_list.clear()

ch_time = (f'All complete | {(int(time.monotonic() - tm) // 3600) % 24:d} h. '
f'{(int(time.monotonic() - tm) // 60) % 60:02d} m. {int(time.monotonic() - tm) % 60:02d} s.')
lnt = len(ch_time)
print(f'\n{"-" * lnt}\n{ch_time}\n{"-" * lnt}')


if __name__ == "__main__":
main()

Вот в принципе и все. Ниже я приведу полный код скрипта для очистки. То есть, то, что мы написали для тестирования функций.

Полный код скрипта:

"""
pip install transliterate
"""
import csv
import string
import time
from pathlib import Path

from transliterate import translit

csv.field_size_limit(2147483647)

rows_list = []


def replacer(txt: str) -> str:
symbols = ("ahkbtmxcepAHKBTMXCEP",
"анквтмхсерАНКВТМХСЕР")
tr = {ord(a): ord(b) for a, b in zip(*symbols)}
return txt.translate(tr)


def fio_normalize(fio: str, ascii_l=True) -> str:
if "http" in fio or "https" in fio or "Http" in fio or "Https" in fio:
return ""
if fio.startswith("-") or fio.endswith("-"):
fio = fio.strip("-").strip()
if "-" in fio:
fio = fio.replace("-", "тирре")
fio = "".join(x for x in fio if x.isalpha() or x == " ").strip().replace("тирре", "-")
ascii_count = 0
for xz in fio:
if xz == " ":
ascii_count += 1
ascii_count += sum(1 for x in xz if x in string.ascii_letters)
if ascii_l and ascii_count == len(fio):
fio = translit(fio, "ru")
elif ascii_l:
temp = []
for x in fio:
temp.append(replacer(x)) if x in string.ascii_letters else temp.append(x)
fio = "".join(temp)
fio = " ".join(x.strip().capitalize() for x in fio.split())
lst = []
for x in fio.split():
if "-" in x:
lst.append("-".join(z.capitalize() for z in x.split("-")))
else:
lst.append(x)
fio = " ".join(lst)
if len(fio.split()) > 3:
fio = " ".join(fio.split()[0:3])
if len(fio) > 50:
fio = fio[:51]
return fio if fio else ""


def email_normalize(mail: str) -> str:
return mail.strip().replace("/", ".") if "@" in mail else ""


def phone_normalize(phone: str) -> str:
phone = "".join(x for x in phone if x.isdecimal())
if phone:
if len(phone) > 11:
return ""
elif 6 <= len(phone) < 10:
return phone
elif len(phone) == 10:
if phone.startswith("9"):
return f"7{phone}"
else:
return phone
elif len(phone) == 11:
if phone.startswith("8") and phone[1] == "9":
return f"7{phone[1:]}"
elif phone.startswith("7"):
return phone
else:
return ""
return ""
return ""


def count_get(items: list) -> bool:
cnt = 0
for item in items:
if item.strip():
cnt += 1
return True if cnt > 1 else False


def read_files(file: str, name: str, ascii_l=True) -> None:
global rows_list
with open(file, "r", encoding="utf-8") as cs:
for nm, row in enumerate(csv.reader(cs, delimiter="|")):
if nm == 0:
rows_list.append(row)
continue
phone, email, fio, uname = row
fio = fio_normalize(fio, ascii_l)
email = email_normalize(email)
phone = phone_normalize(phone)
uname = uname.encode().decode()
if len(uname) > 50:
uname = ""
if count_get([phone, email, fio, uname]):
rows_list.append([phone, email, fio, uname])
else:
continue
print(f"\r{nm+1} | {fio} | {phone} | {email} | {uname}", end="")
if len(rows_list) == 100000:
with open(f"{name}_clean.csv", mode="a", encoding='utf-8', newline='') as csv_f:
file_writer = csv.writer(csv_f, delimiter=";")
file_writer.writerows(rows_list)
rows_list.clear()


def main() -> None:
global rows_list
path = input("path file: >>> ")
ascii_l = input("ascii_l: >>> ")
if not Path(path).exists() or not path or not Path(path).is_file():
exit(0)
tm = time.monotonic()
name = Path(path).name.removesuffix(Path(path).suffix)
cnt_line = sum(1 for _ in open(path, "rb"))
print(f"\n{Path(path).name} | Lines: {cnt_line}\n{'*' * 35}")
if ascii_l == "n":
read_files(path, name, ascii_l=False)
else:
read_files(path, name, ascii_l=True)

if 0 < len(rows_list) < 100000:
with open(f"{name}_clean.csv", mode="a", encoding='utf-8', newline='') as csv_f:
file_writer = csv.writer(csv_f, delimiter=";")
file_writer.writerows(rows_list)
rows_list.clear()

ch_time = (f'All complete | {(int(time.monotonic() - tm) // 3600) % 24:d} h. '
f'{(int(time.monotonic() - tm) // 60) % 60:02d} m. {int(time.monotonic() - tm) % 60:02d} s.')
lnt = len(ch_time)
print(f'\n{"-" * lnt}\n{ch_time}\n{"-" * lnt}')


if __name__ == "__main__":
main()

Тестирование

Запустим скрипт и укажем путь к тестовому «csv». В нем содержаться случайно сгенерированные данные. Очистим их с помощью скрипта. Чтобы вы понимали, вот кусочек изображения с номерами телефонов.

Очистка текста с помощью Python. Часть 02 Гайд, IT, Python, Разработка, Программирование, Рекомендации, Длиннопост

Номера телефонов

Как видите – сборная солянка. Ну и то, что было до обработки и что стало после, на примере одной строки.

Очистка текста с помощью Python. Часть 02 Гайд, IT, Python, Разработка, Программирование, Рекомендации, Длиннопост

Строка до обработки

Обработали и получили:

Очистка текста с помощью Python. Часть 02 Гайд, IT, Python, Разработка, Программирование, Рекомендации, Длиннопост

Строка после обработки

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

А на этом, пожалуй, все.
Спасибо за внимание. Надеюсь, данная информация будет вам полезна!

Подписывайся на наши телеграм каналы!

Показать полностью 4

Как бросить курить и не сорваться: инструкция от тех, кто смог

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

Как бросить курить и не сорваться: инструкция от тех, кто смог Курение, Борьба с курением, Зависимость, Telegram (ссылка), ВКонтакте (ссылка), Длиннопост

История 1 — отражение

@ holoroad

Маленькая дочка почти научилась ходить и всюду телепалась за мной. Я не курил при ней. Ходил на балкон, а она, прильнув к стеклу, смотрела на меня и ждала, когда я докурю и выйду к ней. И в какой-то момент она начала повторять за мной вот эти движения. Маленький человечек, ей было года полтора или два, прикладывала воображаемую сигарету к губам, а потом делала вид, что выпускает дым. И весело так на меня смотрела, сквозь стекло балконной двери. Ей нравилось все, что со мной связано, и она подражала всем моим действиям. Я курил уже двадцать лет и, конечно, делал множество попыток бросить до этого. Но в этот раз у меня в первый раз появилась по-настоящему важная причина бросить. Это важно для человека, который безгранично мне доверяет. С тех пор прошло почти десять лет, в течение которых я не сделал ни одной затяжки.

Решение бросить курить — одно из лучших, которое вы можете принять для своего здоровья, будущего и близких. Но справиться с зависимостью только потому, что «это вредно» будет тяжело. А вот если хотите не задыхаться, поднимаясь по лестнице, или волнуетесь за своего ребенка, которые вдыхает табачный дым, — уже другое дело.

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

История 2 — список

@ maxneb

Беременность жены, рождение ребенка, здоровье, деньги — ничего не было веским поводом бросить окончательно. Постоянно срывался. Помогло составить список, что теряю и что получаю от сигарет, и понимание, что хотя бы одна затяжка — и все насмарку: пару месяцев буду курить. Только список и его осознание. Для каждого он свой. И постоянное обращение к нему. После составления списка курил еще. Но он как заноза висел в голове с вопросом «зачем?»... Так, что-то щелкнуло и сейчас не тянет. Иногда тянет физически, но осознание бесполезности курения сразу глушит позывы. Полгода, полет нормальный...

Бросать на авось — идея, которая подойдет не всем. Нужно понимать, что делать в трудные моменты:

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

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

  • Займите время. Вспомните, чем вы любили заниматься: спорт, хобби, прогулки.

  • Планируйте, что делать при тяге. Она длится всего 3–5 минут. Дыхательные практики или звонок другу помогут пережить сильное желание закурить.

  • Откажитесь от «наградных сигарет». Одна затяжка и вы откатитесь назад.

Можно бросить резко, «с понедельника», или постепенно, снижая количество сигарет до нуля. Главное — определиться и не отступать.

История 3 — переключение

@ Spaka

45 лет, стаж 30. Пытался завязать много раз, потом понял, что после каждой попытки бросить, курить начинаешь больше. Как ребенок, которому не дают вкусняшку, а она случайно попала ему в руки. Из чего мозг сделал вывод: не уверен — не бросай. Потом стал замечать, что организм уже стал сам просить перестать курить. По утрам было очень неприятно во рту, удовольствие после сигареты стало короче, а негатив, приходящий следом, ощутимее: неприятные ощущения в горле, боли миндалин, страх схватить онкодиагноз. Хотя врачи говорили, что все ок, в голове-то гоняешь мысли. Я решил попробовать обмануть сам себя. Не делать из процесса отказа какого-то события. Бросить так, как будто это и должно было произойти, но ты не знаешь когда. Про себя помолился, как сумел, и попросил помощи, хитро прищурил глаз и в момент, когда забыл купить про запас (оставалась пара штук в пачке), просто перестал курить. Мне теперь даже странно, как я раньше это делал. Так и живу почти два года. Кстати, раньше в момент завязки курящих ненавидел, дым был очень противен, до тошноты. Теперь все равно. Присоединяйтесь ;)

Есть несколько стратегий отказа от курения:

  • Резкий. Эффективный и решительный подход.

  • Постепенный. Сначала — меньше сигарет, потом — меньше затяжек. И так до нуля.

  • Психологическая замена. Каждая сигарета — это ритуал. Найдите для каждого из них «здоровую замену».

  • Медикаментозная терапия. При сильной зависимости врач может порекомендовать никотинозаместительную терапию (пластыри, таблетки, жвачки) или препараты, которые помогают справиться с синдромом отмены. Но любые лекарства принимаются только по рекомендации специалиста.

Каждый, кто хочет оставить зависимость в прошлом, может обратиться в центры здоровья, которые работают при поддержке нацпроекта «Продолжительная и активная жизнь», и получить необходимую помощь специалистов. Адреса доступны на официальном портале Минздрава России о здоровье: takzdorovo.ru. Также можно позвонить на горячую линию по отказу от зависимостей 8 800 200-0-200.

История 4 — форма

Аноним

Курила электронки 2 года как замену обычным сигаретам. Думала, что это не так дорого, не так вредно да и для девушки вроде более привлекательно: не пахнут волосы и руки. А потом решила привести свое тело в форму. Стала ходить в зал и поняла, что задыхаюсь на первом же упражнении, хотя женщины гораздо старше меня бодрячком. Было очень тяжело слезть. Друзья советовали заменять сигаретами. А потом уехала в отпуск в страну, где нельзя покупать электронки, отвлеклась, и после возвращения уже не тянуло. Даже на тусовках, где все дымят.

За модными гаджетами и фруктовыми ароматами скрывается химическая бомба, разрушающая организм быстрее, чем обычные сигареты. Электронные сигареты активно продвигаются производителями как «безопасная» альтернатива сигаретам. Но курение вейпа может обернуться серьезными проблемами: от кашля и одышки до поражения сосудов и дыхательных путей.

«Особую тревогу вызывает рост потребления табачных изделий и электронных сигарет. Согласно исследованию, проведенному в нашем Центре, 36,8% курильщиков потребляют одновременно и табак, и электронные сигареты. Среди молодежи в возрасте 25-39 лет этот показатель превышает 45%. Электронные никотиносодержащие и безникотиновые устройства поражают сердце, сосуды, дыхательную систему и ДНК организма не менее пагубно, чем традиционные сигареты, а в ряде случаев способны вызывать острые состояния, включая сосудистые поражения и летальные исходы» – рассказывает руководитель Центра профилактики и контроля потребления табака НМИЦ терапии и профилактической медицины Минздрава России Маринэ Гамбарян.

История 5 — пари

@ kernima

Вроде не было никаких серьезных предпосылок, чтобы бросить. Да и чтобы начать: просто все вокруг курили, думал, это сейчас тренд. А потом как-то сидели в баре и решили поспорить с некурящим другом. Он затирал, что моя жизнь из-за электронки катится ко дну, я — доказывал, что это всего лишь маленькая шалость. В общем поспорили на пять тысяч. Чтобы было легче и можно было отвлечься, начал бегать по утрам. Друг проиграл, а я возвращаться к курению не стал. Вдруг снова у еды появился вкус, я начал высыпаться и больше не устаю на втором лестничном проеме. Короче, советую!))

Сульфат никотина, один из компонентов электронных сигарет, раньше использовали как пестицид, но запретили из-за высокой токсичности. Жидкость для «электронок» содержит и опасные химикаты вроде пропиленгликоля, ацетальдегида и акролеина — промышленных веществ, способных вызывать воспаления, поражения органов и мутации клеток. Ароматизаторы, создающие иллюзию безвредности, на деле могут привести к более тяжелой интоксикации, чем при курении сигарет. А еще вейпы содержат не природный, а синтетический никотин — солевой. Он быстрее всасывается, дольше выводится и вызывает зависимость стремительнее.

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

История 6 — связь

Аноним

Устал курить, понял, что мне это мешает заниматься спортом и в целом комфортно себя чувствовать. Пошел через ассоциации: покурил во время головной боли, и потом через самовнушение дал себе установку, что голова болела от курения. Звучит странно, конечно, но это сработало. Никотиновую зависимость снижал постепенно через редкое курение кальяна (2-3 раза в неделю с последующим уменьшением).

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

Разберитесь, что именно тянет вас к сигарете: скука, стресс, привычка? Когда вы это осознаете, будет легче подобрать альтернативные действия — прогулку, книгу, разговор с близким. Учитесь распознавать моменты, когда особенно хочется закурить, и переключаться на что-то другое. Можно подключиться к программам или группам поддержки — это поможет не сдаваться. И главное: уберите из дома все сигареты.

История 7 — вершина

Аноним

Поднимался с сыном по Пушкинской тропе на гору Железная. Мне лет сорок пять было, идем общаемся, сын бегает туда-сюда. Ну идем короче, а сзади нас догоняет семейная пара, мирно о чем-то щебеча между собой. Догнали и обходят. И так спокойно удаляются… Все бы ничего, но им лет по шестьдесят, если не больше. Я попробовал в их темпе, но задыхаться стал. Короче, поднялся я на гору, спустился, смял пачку и выкинул в мусорную урну. Вот уже 13 лет не курю. Стаж 27 лет.

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


Каждый, кто пытался избавиться от никотиновой зависимости, знает, как это тяжело. Ломка, раздражительность, навязчивые мысли. Даже при переходе на вейпы, иллюзия «меньшего вреда» быстро развеивается: химические коктейли из ароматических смесей также бьют по легким, сосудам и всему организму.

Хорошая новость в том, что вы не одни. В сообществе «Давай бросать» (ВКонтакте и мессенджере Telegram), который работает при поддержке нацпроекта «Продолжительная и активная жизнь» знают, каково бороться с триггерами, искать замену привычке и удерживать себя от срыва. Здесь делятся историями тех, кто смог, поддерживают тех, кто только начал, и помогают разобраться в главном: как пережить отказ без мучений.

Социальная реклама. АНО «Национальные приоритеты», ИНН: 9704007633

Показать полностью
5

Очистка текста с помощью Python. Часть 1

Возьмем простейшую ситуацию, когда вы спарсили некоторые данные с Ф.И.О., номерами телефонов, email и именем пользователя с какого-либо сайта. Однако пользователи не особо любят соблюдать правила заполнения полей. Потому, иногда в Ф.И.О. присутствуют числа и различные символы, которые в дальнейшем затруднят поиск по таким данным. Да и номера телефонов могут быть записаны вразнобой. А потому, необходимо привести их к какому-то общему знаменателю. Следовательно, напрашивается логический вывод – данные необходимо очистить. Вот этим мы и займемся в данной статье.

Очистка текста с помощью Python. Часть 1 Python, IT, Программирование, Программист, Рекомендации, Разработка, Длиннопост

Я долгое время не обращал внимания на встроенные функции для фильтрации символов и пользовался простым «replace». Однако, при таком методе всех символов, которые необходимо заменить, учесть просто невозможно, так как их может быть не одна сотня. Тем не менее, в python уже есть встроенное средство, которое позволит нам оставить только буквы, убрав все остальные символы - isalpha(). Он возвращает True, если символ является алфавитным. Если же нет, возвращается False. Также, с помощью метода isdecimal() можно убрать все буквы и символы, кроме цифр. Ну, а если наличие цифр и букв критично, а вот символы желательно убрать, можно воспользоваться методом isalnum().

Очистка строк от символов и цифр

Давайте же перейдем от слов к делу и напишем небольшую функцию, которая будет производить необходимые операции. Предположим, что у нас есть строка с Ф.И.О., которую необходимо очистить. Возьмем что-то вымышленное и добавим в него цифры и символы.

Например: Дьяченко-Волобуев))#90= Олег владиmирович52415

Как видим, здесь всего хватает. Это не предел. Встречается еще и похуже. Итак, начнем с того, что создадим функцию fio_normalize(fio: str, ascii_l: bool) -> str, которая будет принимать на вход текст, и возвращать его в очищенном виде.

Иногда вместо Ф.И.О. встречаются строки, которые содержат спам. То есть, в них содержится ссылка. Потому, для начала проверим, есть ли «http» в строке. Если есть, чистить дальше не имеет смысла и нужно просто возвратить пустое значение.

if "http" in fio or "https" in fio or "Http" in fio or "Https" in fio:

return ""

Также, в строке может содержаться тире. Ведь фамилия может быть составной, что-то вроде: Петров-Водкин. Потому, нужно проверить, есть ли тире в строке. Если в начале и конце, удалить. Затем проверить, есть ли в самой строке и если есть, заменить на слово. Это нужно для того, чтобы не удалить символ методом isalpha().

if fio.startswith("-") or fio.endswith("-"):

fio = fio.strip("-").strip()

if "-" in fio:

fio = fio.replace("-", "тирре")

Теперь, собственно, строка подготовлена для удаления символов и цифр. Поэтому, выполняем данную операцию и заменяем слово, на которое мы заменили «-».

fio = "".join(x for x in fio if x.isalpha() or x == " ").strip().replace("тирре", "-")

Еще, в строке может присутствовать транслитерация. Это когда русские буквы заменены на английские. Например: Petrov. В данном случае может помочь библиотека «transliterate». Однако, сильно надеяться на нее не стоит, так как разные люди пишут разные окончания по разному. И потому, слово может быть просто искажено. Слегка. И для человека не существенно. Но вот для поиска уже проблема. Тем не менее, попытаться выполнить транслитерацию стоит. Ведь может и повезти. Потому устанавливаем модуль «transliterate» с помощью команды в терминале:

pip install transliterate

и импортируем в наш скрипт:

from transliterate import translit

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

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

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

if ascii_l and ascii_count == len(fio):

fio = translit(fio, "ru")

elif ascii_l:

temp = []

for x in fio:

temp.append(replacer(x)) if x in string.ascii_letters else temp.append(x)

fio = "".join(temp)

Следующее, что нужно сделать, это написать каждое слово в Ф.И.О. с заглавной буквы. А также учесть наличие тире в составной фамилии. Потому, напишем еще небольшой кусочек кода.

fio = " ".join(x.strip().capitalize() for x in fio.split())

lst = []

for x in fio.split():

if "-" in x:

lst.append("-".join(z.capitalize() for z in x.split("-")))

else:

lst.append(x)

fio = " ".join(lst)

Так как у нас Ф.И.О., то оно должно содержать только три слова. Сейчас не берем в расчет не совсем традиционные написания. Поэтому нужно сделать проверку на количество слов в строке. И если их больше трех, обрезать до нужного количества.

Еще нужно проверить, чтобы строка была не длиннее 50 символов. Конечно для Ф.И.О. это редкость. Но бывает и такое. Потому, оставляем его для заполненности, но обрежем до 50 символов. Почему? Дело в том, что если вы добавляете данные в БД SQLite, то это не имеет значения. А вот уже при добавлении в MongoDB и последующее создание индексов, мы получим ошибку на количество символов в индексируемом поле.

if len(fio.split()) > 3:

fio = " ".join(fio.split()[0:3])

if len(fio) > 50:

fio = fio[:51]

Ну и возвращаем обработанную строку из функции. Или пустоту, если строка пуста.

return fio if fio else ""

Полный код функции очистки строки

def fio_normalize(fio: str, ascii_l=True) -> str:

if "http" in fio or "https" in fio or "Http" in fio or "Https" in fio:

return ""

if fio.startswith("-") or fio.endswith("-"):

fio = fio.strip("-").strip()

if "-" in fio:

fio = fio.replace("-", "тирре")

fio = "".join(x for x in fio if x.isalpha() or x == " ").strip().replace("тирре", "-")

ascii_count = 0

for xz in fio:

if xz == " ":

ascii_count += 1

ascii_count += sum(1 for x in xz if x in string.ascii_letters)

if ascii_l and ascii_count == len(fio):

fio = translit(fio, "ru")

elif ascii_l:

temp = []

for x in fio:

temp.append(replacer(x)) if x in string.ascii_letters else temp.append(x)

fio = "".join(temp)

fio = " ".join(x.strip().capitalize() for x in fio.split())

lst = []

for x in fio.split():

if "-" in x:

lst.append("-".join(z.capitalize() for z in x.split("-")))

else:

lst.append(x)

fio = " ".join(lst)

if len(fio.split()) > 3:

fio = " ".join(fio.split()[0:3])

if len(fio) > 50:

fio = fio[:51]

return fio if fio else ""

Теперь нужно еще поговорить о функции, с помощью которой мы будем заменять те самые вхождения английских букв в русские слова. Создадим функцию def replacer(txt: str) -> str, которая на вход получаем символ и возвращает уже замененный, если он есть в таблице замены.

def replacer(txt: str) -> str:

symbols = ("ahkbtmxcepAHKBTMXCEP",

"анквтмхсерАНКВТМХСЕР")

tr = {ord(a): ord(b) for a, b in zip(*symbols)}

return txt.translate(tr)

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

А на этом, пожалуй, все.

Спасибо за внимание. Надеюсь, данная информация будет вам полезна

Подписывайся на наши телеграм каналы!

Показать полностью 1
Отличная работа, все прочитано!