Ques/Help/Req Bose — фреймворк для создания веб-ботов, который проще Selenium

XakeR

Member
Регистрация
13.05.2006
Сообщения
1 912
Реакции
0
Баллы
16
Местоположение
Ukraine
Разработка ботов — это сложно.

Детекторы ботов вроде Cloudflare готовы защищать сайты от наших ботов. Настройка Selenium с помощью ChromeOptions слишком громоздкая, а на Windows становится совсем кошмарной. Отладка ботов через журналы — тоже слишком сложно.

Как решить эти боли, не жертвуя скоростью и удобством разработки? Попробуйте Bose.

Team Lead Python Developer HR TECH (Проект Мобильный личный кабинет) АО «Гринатом», , можно удалённо, По итогам собеседования tproger.ru Вакансии на tproger.ru

Bose, как уверяют разработчики фреймворка, — это первая среда разработки ботов, которая максимально упрощает разработку ботов. Фреймворк основан на на Selenium и предлагает ряд функций, упрощающих разработку.


GitHub — omkarcloud/bose: The Ultimate Web Scraping Framework github.com

Настраиваем Bose​


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

git clone my-bose-project

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

cd my-bose-project python -m pip install -r requirements.txt python main.py

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

Основные особенности Bose Framework​


Добавляет мощные методы, чтобы сделать работу с Selenium намного проще.

Применяет лучшие практики, чтобы избежать обнаружения ботов Cloudflare и PerimeterX.

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

Вспомогательные компоненты для записи очищенных данных в виде файлов JSON, CSV и Excel.

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

Быстро и удобно для разработчиков.

Работаем с Bose​


Допустим, вы хотите начать парсинг веб-сайта. Если бы вы использовали Selenium, вам пришлось бы обрабатывать задачи по открытию и закрытию драйвера следующим образом:

from selenium import webdriver driver_path = ‘path/to/chromedriver’ driver = webdriver.Chrome(executable_path=driver_path) driver.get(‘https://www.example.com’) driver.quit()

Однако Bose Framework использует декларативный и структурированный подход. Вам нужно только написать код ниже, а драйвер Bose сам создаст драйвер, передаст его методу run и закроет работу.

from bose import * class Task(BaseTask): def run(self, driver): driver.get(‘https://www.example.com’)

Конфигурация Bose​


В Selenium, если вы захотите настроить параметры вроде профиля, пользовательского агента или размера окна, нужно будет написать много кода:

from selenium.webdriver.chrome.options import Options from selenium import webdriver driver_path = ‘path/to/chromedriver.exe’ options = Options() profile_path = ‘1’ options.add_argument(f’—user-data-dir={profile_path}’) user_agent = ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.37″)’ options.add_argument(f’—user-agent={user_agent}’) window_width = 1200 window_height = 720 options.add_argument(f’—window-size={window_width},{window_height}’) driver = webdriver.Chrome(executable_path=driver_path, options=options)

Bose Framework упрощает конфигурацию, инкапсулируя её в свойстве BrowserConfig:

from bose import BaseTask, BrowserConfig, UserAgent, WindowSize class Task(BaseTask): browser_config = BrowserConfig(user_agent=UserAgent.user_agent_106, window_size=WindowSize.window_size_1280_720, profile=1)

Обработка исключений​


Исключения — это боль при работе с Selenium.

В Selenium, если возникает исключение, драйвер автоматически закрывается, оставляя вам только журналы для отладки.

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

Bose — фреймворк для создания веб-ботов, который проще Selenium0


Отладка в Bose Framework​


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

Bose упрощает отладку, сохраняя информацию о каждом запуске.

После каждого запуска в задачах создается каталог, содержащий три файла, перечисленных ниже:

task_info.json

Файл содержит информацию о выполнении задачи: продолжительность выполнения задачи, IP-адрес задачи, пользовательский агент, размер окна и профиль, который использовался для выполнения задачи.

final.png

Это снимок экрана, сделанный до закрытия драйвера.

page.html

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

error.log

В случае, если ваша задача рухнула из-за исключения, Bose сохраняет error.log с ошибкой, из-за которой задача рухнула.

Вывод данных​


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

import csv import json def write_json(data, filename): with open(filename, ‘w’) as fp: json.dump(data, fp, indent=4) def write_csv(data, filename): with open(filename, ‘w’, newline=», encoding=’utf-8′) as csvfile: fieldnames = data[0].keys() # get the fieldnames from the first dictionary writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() # write the header row writer.writerows(data) # write each row of data data = [ { «text»: «u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.u201d», «author»: «Albert Einstein» }, { «text»: «u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.u201d», «author»: «J.K. Rowling» } ] write_json(data, «data.json») write_csv(data, «data.csv»)

Bose упрощает процесс, инкапсулируя данные в модуль вывода для чтения и записи данных. Просто метод write для файла, который вы хотите сохранить.

Все данные будут сохранены в папке output/:

from bose import Output data = [ { «text»: «u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.u201d», «author»: «Albert Einstein» }, { «text»: «u201cIt is our choices, Harry, that show what we truly are, far more than our abilities.u201d», «author»: «J.K. Rowling» } ] Output.write_json(data, «data.json») Output.write_csv(data, «data.csv»)

Локальное хранилище​


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

Вы можете импортировать объект LocalStorage из Bose, чтобы сохранять данные при запуске браузера, что чрезвычайно полезно при очистке больших объемов данных.

Данные хранятся в файле local_storage.json в корневом каталоге проекта. Вот как можно его использовать:

from bose import LocalStorage LocalStorage.set_item(«pages», 5) print(LocalStorage.get_item(«pages»))

Другие возможности​


Драйвер, полученный при запуске задачи — это расширенная версия Selenium, в которую добавлены мощные методы, упрощающие работу.

Вот некоторые из популярных методов, добавленных в драйвер:

Bose — фреймворк для создания веб-ботов, который проще Selenium1


Заключение​


Bose — отличный фреймворк, упрощающий скучные части Selenium и парсинга веб-страниц.

Желаем вам удачи и счастливой разработки ботов с помощью Bose Framework!
 
198 154Темы
635 125Сообщения
3 618 410Пользователи
MFzoneНовый пользователь
Верх