Skip to main content

Библиотека для работы с файлами во время парсинга

Project description

Библиотека для работы с файлами во время парсинга

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

Более удобная версия документации на сайте (ru, en)

В библиотеке есть три класса для основных работ:

  1. Pars для работы с запросами и bs4
  2. JsonManager для работы с json
  3. CsvManager для работы с csv

Так же есть три вспомогательных класса

  1. ProgressBarManager для создания прогресс-баров
  2. TimerManager для засечения времени выполнения определённого кода
  3. ZipManager для архивации файлов и папок

Установить библиотеку:

pip install ipars

или

pip3 install ipars

Навигация

Работа с Pars

Данный класс предназначен для работы с запросами и полученной html-страницей.

Класс Pars не принимает никаких данных для конструкторов.

from ipars import Pars

p = Pars()

Коротко о методах Pars:

  • Метод getStaticPage принимает url страницы, путь по которому сохранится страница, метод записи и заголовки запроса. Метод записи «wb» используется для сохранения картинок, по умолчанию writeMethod установлен как «w», что используется для html-страниц. Если заголовки запросов не указаны, то будут использоваться заголовки со случайным user-agent. Метод возвращает статус ответа сайта, его можно использовать для проверкок.
for index, url in enumerate(urlList):
    if p.getStaticPage(url, f'./page{index}') == 404:
        print('Не удалось получить страницу: ', url)
  • Метод getDynamicPage с помощью библиотеки Selenium получает динамически обновляемую страницу. Это помогает, когда контент на странице подгружается динамически. Принимает url страницы, путь сохранения, closeWindow и timeSleep. По умолчанию браузер Selenium открывается в фоновом режиме, и работу браузера не видно, но если closeWindow указать как False, то будет виден процесс выполнения кода. С помощью timeSleep можно увеличить время загрузки страницы если контент на ней долго подгружается

  • Метод gpsa (get page semi-automatically) похож на метод getDynamicPage, но работает в полуавтоматическом режиме. Он открывает страницу сайта и ждёт пока не будет нажат Enter в терминале. В этот момент можно зарегистрироваться на сайте и/или перейти на нужную вкладку сайта, после чего нажать Enter и метод спарсит страницу. Подходит для лент соцсетей, где неавторизованным пользователям контент ограничен. Принисает такие же аргументы для таких же целей, что и getDynamicPage, за исключением closeWindow

  • Метод returnBs4Object возвращает объект beautifulsoup4. Принимает путь до html-страницы, содержимое которой преобразует в объект beautifulsoup, кодировку открытия файла (по умолчанию UTF-8) и тип парсера (по умолчанию lxml).

  • Метод getAttributes нужена чтобы получить список атрибутов из списка объектов bs4. Принимает список объектов bs4 и название атрибута который будет извлекаться из элементов списка

  • Метод getTexts нужена чтобы получить список текста из списка объектов bs4. Принимает список объектов bs4 и параметр needFix. Если этот параметр установлен как True, то из текста будут удалены \n, \t и пробелы с концов

  • Метод pprint используется для вывода значений переменных у которых большая вложеность. Например, если у Вас есть массив объектов, где в качестве значения ключа используется другой массив объектов

  • Метод mkdir используется для создания папки с именем nameDir если она ещё не существует

Пример парсера с использованием ipars:

# О классе ProgressBarManager читай ниже
from ipars import Pars, ProgressBarManager
p = Pars()
nameFile = 'index.html'

# Получаем html страницу
p.getDynamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=0)

# Получаем объект BautifullSoup
soup = p.returnBs4Object(nameFile)

# Находим все карточки ответов
# Первые результаты выдачи те что хотелось получить, а остальные нет. Поэтому нам желательно получить первые 84 элемента
allCards = soup.find_all(class_='b_NgmZrVnRtV8MZMEjLs')[:84]

# Получаем все изображения
allImg = [card.find('img') for card in allCards]

# Получаем все ссылки
allSrc = p.getAttributes(allImg, 'src')

# Создаём папку img если её ещё нет
nameFolder = 'img'
p.mkdir(nameFolder)

# Создаём объект ProgressBarManager
bar = ProgressBarManager(len(allSrc))

# Скачиваем картинки
for index, url in enumerate(allSrc):
    url = 'https:' + url
    p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb')
    bar.next()
bar.finish()

Пример использования методов getAttributes и getTexts

from ipars import Pars
p = Pars()
nameFile = 'index.html'

p.getStaticPage(nameFile, 'https://google.com')
soup = p.returnBs4Object(nameFile)

allTegA = soup.find_all('a')
a1 = p.getTexts(allTegA, needFix=1)
p.pprint(a1)

a2 = p.getAttributes(allTegA, 'href')
p.pprint(a2)

Работа с JsonManager

Данный класс предназначен для записи и извлечения информации из json-файлов.

JsonManager принимает принимает только encoding — кодировку в которой будут читаться файлы (по умолчанию UTF-8)

from ipars import JsonManager

j = JsonManager(encoding="UTF-8")

Коротко о методах JsonManager

  • Метод load используется для получения данных из json-файла по указанному пути

  • Метод dump используется для записи данных в json-файл. Принимает путь до файла и данные для записи

  • Метод pprint такой же как и у Pars

Пример использования JsonManager

from ipars import JsonManager
j = JsonManager()
nameFile = 'data.json'

# Записываем данные
j.dump(nameFile, [1, 2, 3, 4, 5, 6, 7])

# Получаем данные
data = j.load(nameFile)
j.pprint(data) # [1, 2, 3, 4, 5, 6, 7]

Работа с CsvManager

Данный класс предназначен для записи и извлечения информации из csv-файлов.

Класс CsvManager принимает три аргумента:

  • newline — символ переноса на новую строку (по умолчанию используется пустая строка)

  • encoding — кодировка открываемых файлов (UTF-8)

  • delimiter — разделитель который используется в csv файле (;)

from ipars import CsvManager

c = CsvManager(newline="", encoding="UTF-8", delimiter=";")

Коротко о методах CsvManager

  • Метод writerow записывает строку с csv файл. Метод принимает путь до csv файла, метод записи и список данных которые будут записанн в строку файла

  • Метод writerows принимает теже самые аргументы что и writerow, только row должен быть двойным списком с данными для записи. Разница между этими методами в том что writerow записывает одну строку, а writerows столько сколько есть в двойном списке

  • Метод getRows используется для получения списка строк в csv файле. Метод принимает путь до файла откуда будут получены строки

  • Метод pprint такой же как и у Pars

Пример использования CsvManager

from ipars import CsvManager
c = CsvManager()
nameFile = 'data.csv'

# записываем заголовки
c.writerow(nameFile, 'w', ['Количество', 'Цена', 'Итог'])

# записываем данные
c.writerows(nameFile, 'a', [
    ["5", "5", "25"],
    ["6", "6", "36"],
    ["7", "7", "49"],
])

# получаем строки из таблицы
rows = c.getRows(nameFile)

# выводим строки таблицы
c.pprint(rows)

Работа с ProgressBarManager

Класс создаёт прогресс-бар для для отображения процесса выполнения кода. Принимает пять аргументов:

  • max: обязательный параметр, который указывает максимальное значение итераций в прогресс-баре

  • message: сообщение перед прогресс-баром

  • color: цвет прогресс-бара

  • fill: заполнитель для выполненой части

  • width: размер прогресс-бара в символах

from ipars import ProgressBarManager

bar = ProgressBarManager(100) # Здесь max установлен как 100

Коротко о методах ProgressBarManager

  • Метод next запускает следущую итерацию прогресс-бара

  • Метод finish завершает работу прогресс-бара

Пример использования ProgressBarManager

# Импортируем библиотеки
from ipars import ProgressBarManager
from time import sleep

maxValue = 300
# Создаём прогресс-бар по умолчанию
bar = ProgressBarManager(maxValue)

# Имитируем работу
for _ in range(maxValue//2):
    sleep(0.1)
    bar.next()

# Выключаем прогресс-бар
bar.finish()



# Создаём более кастомизированный прогресс-бар
bar = ProgressBarManager(
    maxValue,
    message='Процесс скачивания',
    color='red',
    fill='*',
    width=50
)

# Имитируем работу
for _ in range(maxValue):
    sleep(0.1)
    bar.next()

# Выключаем прогресс-бар
bar.finish()

Работа с TimerManager

Класс TimerManager предназначен для отслеживания времени выполнения кода. Он позволяет получить общее время работы в различных форматах.

from ipars import TimerManager

t = TimerManager()

Коротко о методах TimerManager

  • Метод start — точка начала отсчёта времени

  • Метод end — конечная точка отсчёта времени

  • Метод getWorkTime возвращает общее время работы в указанном формате. Поддерживаемые форматы: seconds, minutes, hours. Параметр ndigits указывает количество знаков после запятой для округления, по умолчанию число не округляется.

Пример использования TimerManager

from time import sleep
from ipars import TimerManager
t = TimerManager()

# Засекаем время
t.start()
sleep(2) # имитация двухсекундной работы
t.end()

# Выводим результат в разных форматах
print(f"Время работы в секундах: {t.getWorkTime()}")                           # 2.0008320808410645
print(f"Время работы в минутах: {t.getWorkTime(ndigits=2, format='minutes')}") # 0.03
print(f"Время работы в часах: {t.getWorkTime(ndigits=4, format='hours')}")     # 0.0006

Работа с ZipManager

Класс ZipManager нужен для архивации папоки файлов. Он принимает принимает только один аргумент — один из возможных уровней сжатия:

  • none — без сжатия

  • normal — обычное сжатие

  • hard — увеличенное сжатие

  • maximum — максимальное сжатие

from ipars import ZipManager

z = ZipManager()

Коротко о методах ZipManager

  • Метод zip_file используется для архивирования одного файла. Принимает путь до исходного файла и путь выходного файла

  • Метод zip_folder используется для архивирования каталога. Принимает путь до исходного каталога и путь выходного файла

Пример использования ZipManager

from ipars import ZipManager
z = ZipManager(compression='maximum')

z.zip_file('./your_file.txt', 'file_archive_maximum.zip')
z.zip_folder('./your_folder/', 'folder_archive_maximum.zip')

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

+999999 HP

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ipars-3.8.1.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ipars-3.8.1-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file ipars-3.8.1.tar.gz.

File metadata

  • Download URL: ipars-3.8.1.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for ipars-3.8.1.tar.gz
Algorithm Hash digest
SHA256 c5c89f8045eff076ad6771cab259d5800a89185042e9c1abfdab9e870509df16
MD5 3858e6ee9540a58ac8f8e3d9fbb61e69
BLAKE2b-256 e3300d2115d74299d473e42c50b0506f12b308bf93b13a5bb445151822c7b30d

See more details on using hashes here.

File details

Details for the file ipars-3.8.1-py3-none-any.whl.

File metadata

  • Download URL: ipars-3.8.1-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for ipars-3.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1e04a6915e5bbbe7ec5dfc1a45636a12e30e3110d5ae4756b8a9a548ae6f843b
MD5 3e20652e043c76a6f893757906a6a2cf
BLAKE2b-256 6cd86c43fba7d3ed98f664c628350d04507fc0bcaaf4240516d33a8666de64a9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page