Путь к мастерству: создаём блокировщик веб-сайтов на Python

4
13337
Добавить в избранное

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

Путь к мастерству: создаём блокировщик веб-сайтов на Python

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

Шаг №1 — Путь к hosts

Cначала найдите путь к файлу hosts (для Windows − C:\Windows\System32\ drivers\etc\hosts и для Linux − etc/hosts). Если вы хорошо разбираетесь в компьютерах, скорее всего, вы уже играли с этим файлом. Но если нет, то стоит знать, что файл hosts может использоваться для работы с IP-адресами.

Теперь нужно настроить, на какой IP будет перенаправляться пользователь при попадании на определённые сайты:

Шаг №2 − Rihanna и Drake

Среда установлена. Теперь, нужно определить, в какое время ресурсы будут заблокированы. Допустим, в рабочее время. Как это сделать? Должны быть часы работы, верно? Не вручную, конечно: мы будем использовать собственную библиотеку даты и времени Python для извлечения текущего времени при исполнении кода.

Циклы позволяют выполнять код быстро. Мы проверяем, сколько сейчас времени, и если оказывается, что сейчас от 8:00 до 16:00, то на экран выводится Rihanna, которая поёт о том, что нужно работать. А если появляется Drake, то можно развлекаться. .time.sleep(5) добавляет задержку в пять секунд, это нужно для нормальной работы циклов.

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

Давайте перейдем к последнему шагу блокировки веб-сайтов. Мы собираемся использовать базовые операции чтения и записи файлов в Python. Процесс состоит из двух частей: сначала происходит блокировка, потому что начинается рабочий день, а затем разблокировка, потому что время отдыхать.

Получаем текущее время. Сначала мы открываем файл, затем изучаем его содержимое и сохраняем в переменной «content». r+ и путь файлу − это разрешение на чтение и запись из файла и в файл. Вы открыли файл, прочитали содержание, и что теперь? Проверьте, есть ли сайт в файле, и если нет, добавьте его туда. Первая часть завершена, сайты из списков заблокированы. Вот что происходит в коде:

блокировщик веб-сайтов

Когда приходит время расслабиться и посмотреть Netflix, можно разблокировать наши веб-сайты. По сути, нужно удалить те сайты, которые мы добавили в файл. Для этого откроем файл и будем читать записи построчно с помощью file.readlines(). file.seek(0) используется, чтобы поместить указатель в исходное положение файла. Если наш веб-сайт из списка на блокировку отсутствует в строке файла хоста, добавьте эту строку. Если в строке есть наш веб-сайт, игнорируйте её. Так можно реализовать удаление сайта из списка блокировки.

Ещё чуть-чуть

Вы проделали большую работу по созданию блокировщика сайтов, но выполнять код для блокировки сайтов кажется плохой идеей, верно? Вот почему мы будем использовать планировщик задач для выполнения этой работы. Обратимся за помощью к Cron Job Scheduler (он предварительно установлен в операционной системе, вам не нужно ничего устанавливать). Просто откройте cron с разрешением sudo и параметром -e.

Добавьте путь к нашему основному файлу, а затем − команду @reboot.

Готово! Сайты из списка успешно заблокированы. Перезагрузите компьютер, чтобы увидеть изменения.

Блокировщики веб-сайтов широко распространены в наши дни, и вы можете легко найти их в магазине приложений своего браузера в качестве расширения. Но кто знает, как эти вещи на самом деле работают? А тут всё понятно − найти код этого приложения можно на GitHub.

Понравился материал о том, как сделать блокировщик веб-сайтов на Python? Другие статьи по теме:

Книги по Python:

Источник: Учимся Python на практике − создаём блокировщик веб-сайтов на Python on Towards Data Science

Интересуетесь программированием на Python?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Комментариев: 4

  1. Андрей Климов

    Ясен пень, ведь под Windows Vista/7/8/8.1/10 для изменения файла C:\Windows\System32\ drivers\etc\hosts требуются права встроенной учётной записи Администратор (что не одно и тоже, что права администратора у обычного аккаунта).

    Тоже самое касается и Linux: внесение изменений в /etc/hosts возможно только от имени root или через sudo. В данном примере скрипт запускается планировщиком при загрузке системы и от имени рута. При использовании сторонних модулей питона это тоже надо учитывать (обычно установку сторонних модулей через pip рекомендуют делать с ключом -m user, но если надо установить модуль глобально в систему, то этот ключик надо избегать).

    Кроме этого, данный скрипт никак не сбрасывает кэш DNS.
    При первичном разрешении доменного имени в его IP адрес, результат разрешения записывается в кэше DNS и далее все запросы по разрешению имени берутся уже из кэша до тех пор, пока по каким-то причинам ранее определённый для имени IP адрес не станет недоступным. В этом случае для имени заново делается разрешение имени через прописанный NS сервер.
    Но фишка в том, что если сайт имеет несколько IP адресов для одного доменного имени, то таким методом заблокировать такой сайт не получится. необходимо внести в hosts ВСЕ известные для этого имени его IP адреса.

    Сомневаюсь, что таким образом будут заблокированы https.

    Любой python скрипт можно запускать напрямую, без вызова python, если в начало скрипта прописать что-то типа:
    #!/usr/bin/env python3
    или
    #!/usr/bin/python

    1. Andrey Bobokhin

      Вы похоже понятия не имеете что такое hosts)

      1. А что такое кэш dns раузера?

  2. Александр Костылев

    Блокировщик не работает на Windiws 10

Добавить комментарий