{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Евгений Лукин: заметки с тегом Python",
    "_rss_description": "Заметки, конспекты",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/evgenylukin.ru\/blog\/tags\/python\/",
    "feed_url": "https:\/\/evgenylukin.ru\/blog\/tags\/python\/json\/",
    "icon": "https:\/\/evgenylukin.ru\/blog\/user\/userpic@2x.jpg?1601030084",
    "author": {
        "name": "Евгений Лукин",
        "url": "https:\/\/evgenylukin.ru\/blog\/",
        "avatar": "https:\/\/evgenylukin.ru\/blog\/user\/userpic@2x.jpg?1601030084"
    },
    "items": [
        {
            "id": "101",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/kak-sdelat-klassny-python-paket\/",
            "title": "Как сделать классный Python-пакет",
            "content_html": "<p><a href=\"https:\/\/antonz.ru\/packaging\/\">https:\/\/antonz.ru\/packaging\/<\/a><\/p>\n",
            "date_published": "2025-05-06T13:00:15+03:00",
            "date_modified": "2025-05-06T13:00:11+03:00",
            "_date_published_rfc2822": "Tue, 06 May 2025 13:00:15 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "101",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "99",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/ta-lib-python3-ustanovka-na-windows-11\/",
            "title": "TA-Lib Python3 — установка на Windows 11",
            "content_html": "<div class=\"e2-text-picture\">\n<img src=\"https:\/\/evgenylukin.ru\/blog\/pictures\/image-7.png\" width=\"639\" height=\"283\" alt=\"\" \/>\n<div class=\"e2-text-caption\">У меня Windows 11, 64-разрядная OS, Python 3.11<\/div>\n<\/div>\n<ol start=\"1\">\n<li>Скачал архив с библиотекой с официального сайта <a href=\"https:\/\/ta-lib.org\/install\/\">https:\/\/ta-lib.org\/install\/<\/a> и распаковал в C:\\ta-lib<\/li>\n<li>Установил Visual Studio Community<\/li>\n<li>Запустил x64 Native Tools Command Prompt for VS 2022<\/li>\n<li>Перешёл в нужный каталог<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">cd C:\\ta-lib\\c\\make\\cdr\\win32\\msvc<\/code><\/pre><ol start=\"5\">\n<li>Запустил установку командой<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">nmake<\/code><\/pre><ol start=\"6\">\n<li>Скачал .whl файл для своей системы и версии python с <a href=\"https:\/\/github.com\/cgohlke\/talib-build\/releases\">https:\/\/github.com\/cgohlke\/talib-build\/releases<\/a><\/li>\n<li>В виртуальном окружении проекта перешёл в папку со скачаным .whl и установил<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">pip install TA_Lib-0.4.32-cp311-cp311-win_amd64.whl<\/code><\/pre>",
            "date_published": "2024-09-22T11:17:41+03:00",
            "date_modified": "2024-09-22T11:18:42+03:00",
            "image": "https:\/\/evgenylukin.ru\/blog\/pictures\/image-7.png",
            "_date_published_rfc2822": "Sun, 22 Sep 2024 11:17:41 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "99",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/evgenylukin.ru\/blog\/pictures\/image-7.png"
                ]
            }
        },
        {
            "id": "94",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/python-eksport-v-xlsx\/",
            "title": "Python — экспорт в XLSX",
            "content_html": "<p><a href=\"https:\/\/xlsxwriter.readthedocs.io\/format.html\">https:\/\/xlsxwriter.readthedocs.io\/format.html<\/a><\/p>\n",
            "date_published": "2023-02-05T11:57:50+03:00",
            "date_modified": "2023-02-05T11:57:47+03:00",
            "_date_published_rfc2822": "Sun, 05 Feb 2023 11:57:50 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "94",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "92",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/eel-2\/",
            "title": "eel",
            "content_html": "<p>Документация<br \/>\n<a href=\"https:\/\/github.com\/python-eel\/Eel\">https:\/\/github.com\/python-eel\/Eel<\/a><\/p>\n<p>Ошибка —noconsole<br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/15341606\/pyinstaller-program-not-working-if-built-without-console\">https:\/\/stackoverflow.com\/questions\/15341606\/pyinstaller-program-not-working-if-built-without-console<\/a><\/p>\n",
            "date_published": "2023-01-08T17:45:15+03:00",
            "date_modified": "2023-01-22T19:58:50+03:00",
            "_date_published_rfc2822": "Sun, 08 Jan 2023 17:45:15 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "92",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "79",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/instrukciya-po-parsingu-python-selenium-webdriver\/",
            "title": "Инструкция по парсингу: Python + Selenium + WebDriver",
            "content_html": "<p>Чтобы скачать актуальную версию WebDriver переходим на <a href=\"chrome:\/\/settings\/help\">chrome:\/\/settings\/help<\/a>, чтобы узнать версию вашего браузера.<br \/>\nПо ссылке <a href=\"https:\/\/sites.google.com\/chromium.org\/driver\/\">https:\/\/sites.google.com\/chromium.org\/driver\/<\/a> скачиваем вебдрайвер для версии вашего барузера и для вашей операционной системы. Например, у меня это chromedriver_win32.zip<br \/>\nИзвлекаем в папку с проектом файл chromedriver.exe.<br \/>\nУстанавливаем в окружение библиотеку Selenium.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">from selenium import webdriver\r\ndriver = webdriver.Chrome('chromedriver.exe')\r\ndriver.get(url)<\/code><\/pre>",
            "date_published": "2022-03-13T10:04:29+03:00",
            "date_modified": "2022-08-12T16:36:38+03:00",
            "_date_published_rfc2822": "Sun, 13 Mar 2022 10:04:29 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "79",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "78",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/preobrazuem-proekt-na-python-v-ispolnyaemy-fayl-exe\/",
            "title": "Преобразуем проект на Python в исполняемый файл .EXE",
            "content_html": "<p><a href=\"https:\/\/www.zacoding.com\/en\/post\/pyinstaller-create-multiple-executables\/\">https:\/\/www.zacoding.com\/en\/post\/pyinstaller-create-multiple-executables\/<\/a><br \/>\n<a href=\"https:\/\/www.zacoding.com\/en\/post\/python-selenium-to-exe\/\">https:\/\/www.zacoding.com\/en\/post\/python-selenium-to-exe\/<\/a><\/p>\n<p>Устанавливаем библиотеку PyInstaller в наше окружение. Важно установить именно в окружение, иначе могут быть проблемы с установкой модулей. Можем получить ошибку «pyinstaller no module named»<br \/>\nWindows:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">py -m pip install &quot;SomeProject&quot;<\/code><\/pre><p>Unix\/macOS:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">python3 -m pip install &quot;SomeProject&quot;<\/code><\/pre><p>Преобразуем скрипт в программу<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">pyinstaller myscript.py --onefile --windowed<\/code><\/pre><p>—onefile — приложение в одном файле<br \/>\n—windowed — не показывать консоль<br \/>\n—console — показывать консоль<\/p>\n<p>У вас появятся две новые папки:<br \/>\nbuild<br \/>\ndist<\/p>\n<p>В папке dist будет лежать наш исполняемый файл.<\/p>\n<p>Если мы всё равно получаем ошибку «pyinstaller no module named»:<\/p>\n<ul>\n<li>удалите пакет в папке build и сформируйте заново<\/li>\n<li>попробуйте добавить установку модуля с помощью<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">pyinstaller myscript.py --onefile --windowed --<\/code><\/pre>",
            "date_published": "2022-03-04T11:43:21+03:00",
            "date_modified": "2022-10-19T15:13:14+03:00",
            "_date_published_rfc2822": "Fri, 04 Mar 2022 11:43:21 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "78",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "75",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/povtornye-popytki-zaprosov-v-requests\/",
            "title": "Повторные попытки запросов в Requests",
            "content_html": "<p>Для повторных запросов используем http адаптер.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">from requests.adapters import HTTPAdapter\r\n\r\nurl = 'https:\/\/google.com\/'\r\n\r\ns = requests.Session()\r\ns.mount(url, HTTPAdapter(max_retries=3))\r\nr = s.get(url=url)<\/code><\/pre><p><a href=\"https:\/\/www.coglib.com\/~icordasc\/blog\/2014\/12\/retries-in-requests.html\">Источник<\/a><\/p>\n",
            "date_published": "2021-12-01T16:07:26+03:00",
            "date_modified": "2021-12-01T16:23:02+03:00",
            "_date_published_rfc2822": "Wed, 01 Dec 2021 16:07:26 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "75",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "74",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/python-obedinit-znacheniya-po-klyuchu\/",
            "title": "Python — объединить значения по ключу",
            "content_html": "<p>Для объединения значений по ключу используем библиотеку collections.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">from collections import defaultdict\r\n\r\nproducts = defaultdict(list)\r\n\r\nfor line in file:\r\n    products[sku].append(line)<\/code><\/pre>",
            "date_published": "2021-11-11T13:45:26+03:00",
            "date_modified": "2021-11-11T13:45:22+03:00",
            "_date_published_rfc2822": "Thu, 11 Nov 2021 13:45:26 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "74",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "68",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/monitoring-avito\/",
            "title": "Мониторинг авито",
            "content_html": "<p>Написал простенький скрипт, который переходит по ссылке с настроенными фильтрами. Скрипт парсит первую страницу с объявлениями и присылает в телеграм сообщение с результатами. Чтобы авито не заблокировал IP — подключил прокси.<\/p>\n<p>В принципе, всё оказалось реально.<\/p>\n<p>Как улучшить: парсить раз в минуту или реже, свежие объявления класть в базу данных, сортировать их по каким-нибудь критериям и сначала показывать лучшие.<\/p>\n",
            "date_published": "2021-06-28T10:52:16+03:00",
            "date_modified": "2021-06-28T10:52:04+03:00",
            "_date_published_rfc2822": "Mon, 28 Jun 2021 10:52:16 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "68",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "63",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/kak-uskorit-parsing-selectolax\/",
            "title": "Как ускорить парсинг. Selectolax",
            "content_html": "<p>Парсить на пайтоне можно не только с помощью БьютифулСуп, но и ещё нескольких библиотек.<\/p>\n<p>Замер скорости: <a href=\"https:\/\/rushter.com\/blog\/python-fast-html-parser\/\">https:\/\/rushter.com\/blog\/python-fast-html-parser\/<\/a><\/p>\n<p>Синтаксис Selectolax: <a href=\"https:\/\/github.com\/rushter\/selectolax\/blob\/master\/examples\/walkthrough.ipynb\">https:\/\/github.com\/rushter\/selectolax\/blob\/master\/examples\/walkthrough.ipynb<\/a><\/p>\n",
            "date_published": "2021-01-30T09:24:55+03:00",
            "date_modified": "2021-01-25T11:40:21+03:00",
            "_date_published_rfc2822": "Sat, 30 Jan 2021 09:24:55 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "63",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "61",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/o-chyom-zabyvayut-v-uchebnikah-po-yazykam-programmirovaniya\/",
            "title": "О чём забывают в учебниках по языкам программирования",
            "content_html": "<p>Снова взялся за Пайтон.<br \/>\nНачал читать очередную книгу и подумал вот о чём. Ни в одной книге по языку программирования не учат программированию в принципе. То есть сразу говорят — вот язык, у него такие типы и операции, функции и т. д. Имея ввиду, что читатель уже знает, что такое программирование.<br \/>\nА я не знаю.<br \/>\nНе знаю и всё. Да, что-то было в школе, что-то в техникуме, даже что-то в институте. Но мне эта тема была не интересна вообще. Поэтому каждый раз, когда я открываю учебник по программированию — вытираю слёзы бессилия. Опять этот ненавистный «Привет, мир» или ещё хуже «Hello World».<br \/>\nC++, PHP, Java, теперь Pyton — мне нужны эти языки по работе. Но учить нет никакого желания. Я просто тупо не понимаю, что мне со всем этим делать.<br \/>\nБыло бы круто, если бы введение было примерно таким:<br \/>\n«Привет, чувак! Прежде чем ты приступишь к обучению этого непростого языка, я хочу спросить тебя — а знаешь ли ты что такое программирование в принципе? Если знаешь — пропускай эту главу. Если же ты впервые начинаешь постигать азы программирования, то во-первых: благодарю тебя, что решил начать с изучения языка %%название любого языка программирования%% — это правильный выбор, а во-вторых: на следующих трёх страницах мы попытаемся коротко рассказать, что такое программирование. После изучения этого введения тебе будет легко ориентироваться в понятиях, которые ты встретишь на страницах этой книги.»<\/p>\n",
            "date_published": "2020-10-24T20:00:09+03:00",
            "date_modified": "2020-11-24T17:56:05+03:00",
            "_date_published_rfc2822": "Sat, 24 Oct 2020 20:00:09 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "61",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "54",
            "url": "https:\/\/evgenylukin.ru\/blog\/all\/kak-borolsya-s-pitonom\/",
            "title": "Как боролся с Питоном",
            "content_html": "<p>Смотрю на ютубе видео, как спарсить сайт. Много роликов, как парсить с помощью программ, написанных на Питоне. Питон — это язык программирования Python.<\/p>\n<p>Смотрю — и ничего не понимаю.<\/p>\n<p>Все чуваки, кто рассказывают про настройку парсинга, объясняют его так, как будто зритель уже программирует на питоне. Это как если пилот будет показывать, как взлетать и сажать самолёт, показывая какие кнопки нажимать, но не объяснять, почему именно эти кнопки, а не соседние.<\/p>\n<p>Чтобы всё таки разобраться в вопросе, пошёл изучать основы. Лучше всех о Питоне рассказывается на <a href=\"https:\/\/praktikum.yandex.ru\/backend-developer\/\">Яндекс Практикуме<\/a>.<\/p>\n",
            "date_published": "2020-05-14T20:27:15+03:00",
            "date_modified": "2020-05-14T20:26:55+03:00",
            "_date_published_rfc2822": "Thu, 14 May 2020 20:27:15 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "54",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3849,
    "_e2_ua_string": "E2 (v3849; Aegea)"
}