Фото

Добавить программу в автозапуск с помощью Python


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

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

Что такое автозапуск программ?

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

Подходы к добавлению программ в автозапуск

Существует несколько различных методов добавления приложений в автозапуск в операционных системах Windows и Linux. Способ выбора зависит от специфики ОС и возможностей разработчика. Мы сфокусируемся на подходах, где задействован язык Python, благодаря которому весь процесс станет интуитивно понятным и универсальным.

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

Python и pip

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

Библиотеки для работы с автозапуском

Мы будем использовать стандартные Python модули os и platform, чтобы обеспечить взаимодействие с файловой системой и определить текущую ОС. Эти модули идут в комплекте с Python, поэтому требуются лишь базовые установки языка.

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

Добавление в автозапуск на Windows

Код для добавления программы в автозапуск на Windows создаёт символьную ссылку в специальной папке:

import os
import sys

def add_to_startup(program_name: str) -> None:
    """
    Добавляет программу в автозапуск Windows.
    :param program_name: Имя программы для автозапуска
    """
    startup_path = os.path.join(os.getenv('APPDATA'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup')
    target_link = os.path.join(startup_path, f'{program_name}.lnk')
    os.symlink(sys.argv[0], target_link)

 

Код выше создает символическую ссылку в каталоге автозапуска Windows, что позволяет программе запускаться автоматически.

Добавление в автозапуск на Linux

Для Linux мы создаем .desktop файл, который будет выполняться при старте:

 

import os

def add_to_startup(command: str) -> None:
    """
    Добавляет команду в автозапуск на Linux.
    :param command: Команда для автозапуска
    """
    autostart_file = f'~/.config/autostart/{command}.desktop'
    with open(os.path.expanduser(autostart_file), 'w') as file:
        file.write(f'[Desktop Entry]\nType=Application\nExec={command}\nHidden=false\nNoDisplay=false\nX-GNOME-Autostart-enabled=true\nName[en_US]={command}\nName={command}\n')

 

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

Проверка, добавлена ли программа в автозапуск

 

Проверка на Windows

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

Проверка на Linux

На Linux правильность работы можно проверить, исследовав .desktop файл на наличие ошибок в синтаксисе и правильную настройку прав доступа.

 

Типичные ошибки и их исправление

 

Общие ошибки при добавлении в автозапуск

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

Отладка с помощью логов

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

 

Заключение

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

 
 
Источник:  external.software


Фото

Парсинг сайтов - Regex в Beautiful Soup


В мире веб-скрапинга и анализа данных, эффективный поиск и извлечение информации из HTML/XML документов имеют решающее значение. Beautiful Soup — это мощная библиотека Python, которая значительно упрощает этот процесс.

Однако стандартные методы поиска Beautiful Soup иногда могут быть недостаточными для сложных или изменчивых структур веб-страниц. Именно здесь на помощь приходят регулярные выражения (Regex).

В этом руководстве мы подробно рассмотрим, как интегрировать Regex с Beautiful Soup, чтобы значительно расширить ваши возможности поиска. Мы начнем с основ и перейдем к продвинутым техникам, предоставляя практические примеры для решения реальных задач веб-скрапинга.

Основы Beautiful Soup и регулярных выражений

Beautiful Soup — это библиотека Python для парсинга HTML и XML документов. Она преобразует сложные веб-страницы в легкодоступную структуру данных, позволяя извлекать информацию с помощью интуитивно понятных методов поиска, навигации и модификации.

Регулярные выражения (Regex) — это мощный инструмент для работы со строками, позволяющий описывать и находить текстовые шаблоны. Они становятся незаменимыми, когда стандартные методы поиска Beautiful Soup оказываются недостаточными для обнаружения элементов со сложными или меняющимися характеристиками.

Что такое Beautiful Soup и зачем он нужен

Beautiful Soup – это мощная библиотека Python, разработанная для парсинга HTML и XML документов. Она преобразует сложные веб-страницы в удобные для навигации Python-объекты, формируя синтаксическое дерево. Это позволяет разработчикам легко извлекать данные, находить элементы и манипулировать их содержимым. Beautiful Soup значительно упрощает процесс веб-скрапинга, предоставляя интуитивно понятные методы для навигации по структуре страницы, поиска тегов, атрибутов и текста, делая ее незаменимым инструментом для автоматизированного сбора информации из веба.

Введение в регулярные выражения (Regex) для поиска

Регулярные выражения (Regex) – это мощный инструмент для поиска и манипулирования текстом, основанный на использовании шаблонов. В контексте Beautiful Soup, Regex позволяет находить элементы, соответствующие определенным текстовым паттернам, а не только точным совпадениям.

  • Определение шаблонов: Regex определяет шаблоны, описывающие искомые строки. Например, шаблон r'^[A-Za-z]+$' ищет строки, состоящие только из букв.

  • Модуль re в Python: Для работы с Regex в Python используется встроенный модуль re. Beautiful Soup интегрируется с этим модулем, позволяя применять Regex для поиска по тегам, атрибутам и тексту.

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

  • Примеры использования: Regex можно использовать для поиска всех ссылок, начинающихся с определенного домена, или для извлечения всех тегов <div> с атрибутом class, содержащим определенное слово.

Поиск элементов с помощью Regex в Beautiful Soup

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

Использование Regex в методах find() и find_all()

Методы find() и find_all() принимают объект Regex в качестве аргумента для поиска по тегам, атрибутам и тексту. Для этого необходимо передать скомпилированный объект регулярного выражения, созданный с помощью re.compile(), или строку, представляющую шаблон регулярного выражения, непосредственно в метод.

  • find(regex): Возвращает первый элемент, соответствующий заданному регулярному выражению.

  • find_all(regex): Возвращает список всех элементов, соответствующих заданному регулярному выражению.

Поиск по имени тега и тексту с использованием Regex

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

Пример:

import re
from bs4 import BeautifulSoup

html_doc = """<a>Link 1</a><b>Bold text</b>
<a>Link 2</a>"""
soup = BeautifulSoup(html_doc, 'html.parser')

links = soup.find_all(re.compile('^a')) # Найти все теги, начинающиеся с 'a'
print(links)

text = soup.find_all(text=re.compile('Link')) # Найти текст, содержащий 'Link'
print(text)

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

Использование Regex в методах find() и find_all()

Методы find() и find_all() в Beautiful Soup становятся мощнее с использованием регулярных выражений. Вместо точного совпадения строки, вы можете искать элементы, соответствующие определенному шаблону.

  • find(regex) возвращает первый элемент, соответствующий шаблону.

  • find_all(regex) возвращает все элементы, соответствующие шаблону, в виде списка.

Regex можно использовать для поиска:

  1. По содержимому тега (тексту).

  2. По имени тега.

  3. По атрибутам тега (будет рассмотрено далее).

Пример:

from bs4 import BeautifulSoup
import re

html = '<p class="body">Текст 1</p><p class="body">Текст 2</p>'
soup = BeautifulSoup(html, 'html.parser')

# Найти все элементы <p> с классом, содержащим "body"
body_elements = soup.find_all('p', class_=re.compile('body'))

for element in body_elements:
    print(element.text)

 

В этом примере re.compile('body') создает regex-объект, который ищет в атрибуте class значения, содержащие слово "body".

Поиск по имени тега и тексту с использованием Regex

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

  • Поиск по имени тега: Вместо точного имени тега можно передать regex. Beautiful Soup найдет все теги, имена которых соответствуют этому регулярному выражению. Например, <soup.find_all(re.compile('^b'))> найдет все теги, начинающиеся с буквы ‘b’ (body, b и т.д.).

  • Поиск по тексту: Аргумент string в методах find() и find_all() принимает регулярные выражения. Это позволяет находить элементы, содержащие текст, соответствующий заданному шаблону. Например, <soup.find_all(string=re.compile('hello'))> найдет все элементы, содержащие текст "hello" (регистрозависимо).

При использовании regex для поиска текста важно помнить о следующем:

  • Beautiful Soup вернет объект NavigableString, представляющий найденный текст, а не сам тег.

  • Чтобы получить родительский тег, можно использовать свойство parent объекта NavigableString.

Использование regex в сочетании с именами тегов и текстовым поиском предоставляет мощные инструменты для точного и гибкого извлечения информации из HTML/XML документов.

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

Теперь, когда мы освоили основы, давайте перейдем к продвинутым техникам. В этом разделе мы рассмотрим, как использовать регулярные выражения для поиска элементов по атрибутам, а также как применять re.compile() для создания сложных и эффективных запросов. Это расширит ваши возможности по извлечению данных из HTML и XML документов, предоставляя большую гибкость и контроль над процессом поиска.

Поиск по атрибутам с использованием Regex

Beautiful Soup позволяет искать элементы HTML не только по тегам и тексту, но и по значениям атрибутов, используя регулярные выражения.

Например, чтобы найти все теги <a> с атрибутом href, содержащим слово "example", можно использовать следующий код:

import re
from bs4 import BeautifulSoup

html = '''
<a href="https://www.example.com">Example Link</a>
<a href="https://www.google.com">Google Link</a>
<a href="https://example.org">Another Example</a>
'''

soup = BeautifulSoup(html, 'html.parser')

links = soup.find_all('a', href=re.compile(r'example'))

for link in links:
    print(link['href'])

 

В этом примере re.compile(r'example') создает объект регулярного выражения, который используется для поиска соответствий в атрибуте href. Этот метод особенно полезен, когда необходимо найти атрибуты, соответствующие определенному шаблону, а не конкретному значению.

Использование функций и re.compile() для сложных запросов

Для повышения эффективности при частом использовании одного и того же сложного шаблона рекомендуется применять re.compile(). Это предварительно компилирует регулярное выражение, оптимизируя процесс поиска. Beautiful Soup также позволяет передавать пользовательские функции в методы find() и find_all() для реализации кастомной логики фильтрации элементов, предоставляя максимальную гибкость.

Практические примеры и лучшие практики

Regex в Beautiful Soup открывает широкие возможности для веб-скрапинга. Рассмотрим несколько примеров:

  1. Извлечение данных по шаблону: Например, извлечение всех ссылок с определенным словом в URL.

  2. Работа с динамическим контентом: Парсинг атрибутов, значения которых генерируются динамически.

  3. Очистка данных: Удаление нежелательных символов или форматирование текста.

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

  • Компилируйте regex с помощью re.compile() для повышения производительности.

  • Используйте try-except блоки для обработки возможных ошибок, связанных с некорректным HTML.

  • Будьте внимательны к edge cases и тщательно тестируйте свои regex.

Решение типовых задач веб-скрапинга с Regex

Рассмотрим несколько типичных задач веб-скрапинга, где Regex демонстрирует свою мощь в Beautiful Soup:

  1. Извлечение цен с веб-сайта: Если цены представлены в разных форматах (например, $100100 USD100.00), Regex поможет извлечь их все, приводя к единому формату.

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

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

  4. Извлечение данных из атрибутов тегов: Regex позволяет находить элементы, у которых значения атрибутов соответствуют заданному шаблону, например, id="item-[0-9]+".

Использование Regex в Beautiful Soup позволяет решать широкий спектр задач, связанных с извлечением и обработкой данных из HTML и XML документов, значительно расширяя возможности стандартных методов поиска.

Оптимизация и распространенные ошибки

Для оптимизации поиска с Regex в Beautiful Soup всегда старайтесь сужать область поиска, применяя его к поддеревьям HTML, а не ко всему документу. Это значительно ускоряет обработку. Распространенные ошибки включают использование слишком широких регулярных выражений, что приводит к ложным срабатываниям, и забывание обработки случая, когда find() возвращает None.

Заключение

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

 
 
 
 


Фото

Парсинг сайтов на Python: как написать скрипт


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

Что такое парсинг?

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

Часто парсинг используют боты, которые потом предоставляют доступ к собранным структурированным данным. Это может быть список статей на сайте, вакансий на платформе по поиску работы или предложений на досках объявлений. Например, один из героев нашего блога написал бот, который нашел ему работу за месяц. Если у сайта нет полноценного открытого API, то парсер ищет данные с помощью GET-запросов к серверу, а это создает дополнительную нагрузку на сервер.

Это накладывает некоторые этические ограничения на скрипты для парсинга веб-сайтов:

  • не стоит отправлять слишком много запросов к серверу, главная задача — собрать полезные данные, а не положить инфраструктуру сервиса;
  • если есть публичное API, то лучше использовать его;
  • на сайте могут быть личные данные пользователей, к ним надо относиться бережно и внимательно.

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

Для чего нужен парсинг?

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

  • Мониторинг цен. Можно быстро и эффективно отслеживать цены на один и тот же товар на разных площадках. Пользователям эта информация нужна для поиска самого выгодного предложения, а компаниям — для корректировки цен в своих магазинах.
  • Отслеживание трендов. В социальных сетях постоянно меняются популярные темы. Надо проводить много времени в Сети, чтобы идти в ногу со временем или использовать автоматизированные системы сбора популярных постов.
  • Новости. С помощью парсинга можно разработать собственный агрегатор новостей и настроить его только на интересные сайты и медиа.
  • Исследования. Для глубокого анализа рынка или конкурентов нужны большие массивы данных. Ручной сбор займет много времени. Парсер выполнит задачу быстрее и точно ничего не пропустит.

Python и Beautiful Soup

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

Еще одно преимущество Python — его популярность. Для  языка программирования есть большое количество сторонних библиотек для различных задач и активное сообщество, которое может помочь советом. Одна из полезных библиотек для парсинга веб-сайтов — BeautifulSoup. С ее помощью можно легко анализировать HTML-файлы и находить в них нужные данные. В этой статье будем парсить сайт с ее помощью.

Как установить Beautiful Soup

Есть несколько популярных способов запуска кода на Python:

  • На своем компьютере. Python работает на Windows, Linux и MacOS. Для этого надо предварительно установить язык программирования на устройство. Сам код можно писать в редакторе или в полноценной IDE. Из бесплатных доступны Visual Studio Code и PyCharm Community. Плюсы этого способа заключаются в том, что все данные хранятся локально, а код выполняется быстрее.
  • В облачном сервисе. Есть множество платформ, которые позволяют писать и запускать код на Python в облаке. Для этого на компьютер не надо устанавливать дополнительные пакеты и заботиться о совместимости. Понадобится только браузер и стабильное подключение к интернету. Все данные будут передаваться на удаленный сервер. Такой способ подходит для новичков или для быстрых экспериментов с кодом. Можно использовать бесплатные Repl.itGoogle Colab или Programiz

Для работы нам понадобятся библиотеки BeautifulSoup, requests и lxml. Их можно установить с помощью следующей команды в терминале:

    $ pip3 install requests BeautifulSoup4 lxml
 

Получаем HTML-страницу

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

    import requests
 
    url = 'https://blog.skillfactory.ru/programmist-v-sims-4/'
    response = requests.get(url)
    response.raise_for_status()
    print(response.text)

Что в коде:

  • import requests — импортируем библиотеку requests в код скрипта;
  • url = ‘https://blog.skillfactory.ru/programmist-v-sims-4/’ — переменная, в которой хранится ссылка на целевую страницу;
  • response = requests.get(url) — выполняем GET-запрос и передаем в него переменную с хранящейся ссылкой;
  • response.raise_for_status() — эта функция вернет нам код ошибки, если запрос не получится выполнить. Если не добавить эту строчку, то Python будет дальше выполнять код и не обращать внимания на ошибку;
  • print(response.text) — печатаем код полученной страницы.

В ответе мы получим весь код страницы, включая CSS-стили и JavaScript. Вот так это выглядит:

Html разметка
Html-разметка страницы

Парсим страницу

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

Для этого потребуется веб-инспектор в любом браузере. Мы будем использовать Safari, но этот режим есть и в других браузерах. К примеру, в Google Chrome он открывается сочетанием клавиш Сtrl + Shift + I (Windows) или ⌥ + ⌘ + I (macOS). После этого можно выбрать на странице элемент и увидеть его код в инспекторе.

Веб-инспектор в браузере
Веб-инспектор в браузере Safari

Заголовок статьи находится в теге <h1>, поэтому попробуем получить его содержимое с помощью библиотеки BeautifulSoup. Для этого передадим в функцию find искомый тег:

    from bs4 import BeautifulSoup
    import requests
 
    url = 'https://blog.skillfactory.ru/programmist-v-sims-4/'
    response = requests.get(url)
    response.raise_for_status()
 
    soup = BeautifulSoup(response.text, 'lxml')
    title = soup.find('h1')print(title)
 
 

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

    soup = BeautifulSoup(response.text, 'lxml')
    title = soup.find('h1')
    title = title.text
    print(title)
 
 

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

    paragraph = soup.find('p')
    paragraph = paragraph.text
 
    print(paragraph)
 
 
 

Мы в точности повторили весь порядок действий, но парсер вывел совсем не ту строчку. Все дело в том, что мы искали элемент по тегу <p>. В HTML-файле их может быть несколько, а BeautifulSoup ищет самый первый. Поэтому запрос надо уточнить и сделать его более конкретным.

Для этого можно указать дерево наследования элементов. К примеру, если тег <p> входит в <article>, а тот — в <main>, то код запроса можно будет записать так: soup.find(‘main’).find(‘article’).find(‘p’). Еще можно искать элемент по его классу. Для этого в функцию надо передать тег и его класс: soup.find(‘p’, class_=’paragraph’).

В нашем случае запрос будет выглядеть следующим образом:

    paragraph = soup.find('div', class_='single-content').find('p')
    paragraph = paragraph.text
 
    print(paragraph)
 
 

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

Сохраняем результат

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

Для этого воспользуемся встроенной функцией write(). Сперва откроем файл в режиме записи:

    file = open("parsing.txt", "w")
 

Если файла с таким названием нет, то Python сам создаст его в директории проекта.

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

    file.write(title)
    file.write(paragraph)
 
    file.close()
 

Коротко о том, как парсить сайты на Python

  • С помощью парсинга можно автоматически анализировать веб-страницы и вытаскивать из них полезную информацию.
  • Для парсинга необходимо отправлять запросы к серверу, чтобы получать код сайтов, а это может нагружать сервис, поэтому важно не злоупотреблять этим.
  • Если у сервиса есть публичное API, то лучше пользоваться им.
  • В Python удобно парсить веб-сайты с помощью библиотеки BeautifulSoup.
  • Запросы выполняются с помощью библиотеки requests.
  • Результат парсинга можно сохранять в файл, вносить в базу данных или отправлять с помощью почты и мессенджеров.

 

Источник: blog.skillfactory.ru

 

 



Фото

Как читать excel-файлы (xlsx) при помощи Python


.xlsx – это расширение документа Excel, который может хранить большой объем данных в табличной форме. Более того, в электронной таблице Excel можно легко выполнять многие виды арифметических и логических вычислений.

 

Иногда программистам требуется прочитать данные из документа Excel. В Python для этого есть множество различных библиотек, например, xlrdopenpyxl и pandas. Сегодня мы поговорим о том, как читать excel-файлы (xlsx) при помощи Python, и рассмотрим примеры использования различных библиотек для этих целей.

Для начала
Для проверки примеров этого руководства потребуется какой-нибудь файл Excel с расширением .xlsx, содержащий какие-либо исходные данные. Вы можете использовать любой существующий файл Excel или создать новый. Мы создадим новый файл с именем sales.xlsx со следующими данными:

sales.xlsx

Sales Date Sales Person Amount
12/05/18 Sila Ahmed 60000
06/12/19 Mir Hossain  50000
09/08/20 Sarmin Jahan 45000
07/04/21 Mahmudul Hasan 30000

Этот файл мы и будем читать с помощью различных библиотек Python в следующей части этого руководства.
  

Чтение Excel-файла с помощью xlrd

    Библиотека xlrd не устанавливается вместе с Python по умолчанию, так что ее придется установить. Последняя версия этой библиотеки, к сожалению, не поддерживает Excel-файлы с расширением .xlsx. Поэтому устанавливаем версию 1.2.0. Выполните следующую команду в терминале:

       pip install xlrd == 1.2.0

       После завершения процесса установки создайте Python-файл, в котором мы будем писать скрипт для чтения файла sales.xlsx с помощью модуля xlrd.

Воспользуемся функцией open_workbook() для открытия файла xlsx для чтения. Этот файл Excel содержит только одну таблицу. Поэтому функция workbook.sheet_by_index() используется в скрипте со значением аргумента 0.

Затем используем вложенный цикл for. С его помощью мы будем перемещаться по ячейкам, перебирая строки и столбцы. Также в скрипте используются две функции range() для определения количества строк и столбцов в таблице.

Для чтения значения отдельной ячейки таблицы на каждой итерации цикла воспользуемся функцией cell_value() . Каждое поле в выводе будет разделено одним пробелом табуляции.

   

import xlrd

# Open the Workbook
workbook = xlrd.open_workbook("sales.xlsx")

# Open the worksheet
worksheet = workbook.sheet_by_index(0)

# Iterate the rows and columns
for i in range(0, 5):
    for j in range(0, 3):
        # Print the cell values with tab space
        print(worksheet.cell_value(i, j), end='\t')
    print('')

Запустим наш код и получим следующий результат.

       

Чтение Excel-файла с помощью openpyxl

    Openpyxl – это еще одна библиотека Python для чтения файла .xlsx, и она также не идет по умолчанию вместе со стандартным пакетом Python. Чтобы установить этот модуль, выполните в терминале следующую команду:

pip install openpyxl

После завершения процесса установки можно начинать писать код для чтения файла sales.xlsx.

Как и модуль xlrd, модуль openpyxl имеет функцию load_workbook() для открытия excel-файла для чтения. В качестве значения аргумента этой функции используется файл sales.xlsx.

Объект wookbook.active служит для чтения значений свойств max_row и max_column. Эти свойства используются во вложенных циклах for для чтения содержимого файла sales.xlsx.

Функцию range() используем для чтения строк таблицы, а функцию iter_cols() — для чтения столбцов. Каждое поле в выводе будет разделено двумя пробелами табуляции.

import openpyxl

# Define variable to load the wookbook
wookbook = openpyxl.load_workbook("sales.xlsx")

# Define variable to read the active sheet:
worksheet = wookbook.active

# Iterate the loop to read the cell values
for i in range(0, worksheet.max_row):
    for col in worksheet.iter_cols(1, worksheet.max_column):
        print(col[i].value, end="\t\t")
    print('')

Запустив наш скрипт, получим следующий вывод.

 

Чтение Excel-файла с помощью pandas

    Если вы не пользовались библиотекой pandas ранее, вам необходимо ее установить. Как и остальные рассматриваемые библиотеки, она не поставляется вместе с Python. Выполните следующую команду, чтобы установить pandas из терминала.

pip install pandas

    После завершения процесса установки создаем файл Python и начинаем писать следующий скрипт для чтения файла sales.xlsx.

В библиотеке pandas есть функция read_excel(), которую можно использовать для чтения .xlsx-файлов. Ею мы и воспользуемся в нашем скрипте для чтения файла sales.xlsx.

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

import pandas as pd

# Load the xlsx file
excel_data = pd.read_excel('sales.xlsx')
# Read the values of the file in the dataframe
data = pd.DataFrame(excel_data, columns=['Sales Date', 'Sales Person', 'Amount'])
# Print the content
print("The content of the file is:\n", data)

После запуска кода мы получим следующий вывод.

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

Заключение

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

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



1