Как использовать Botright для веб-скрейпинга?
В этом руководстве я пошагово покажу, как использовать Botright. Мы рассмотрим его ключевые функции, установку, напишем простой код и даже разберем те сложные… CAPTCHAs. Не волнуйтесь, если вы новичок в веб-скрапинге — эту статью легко понять благодаря четким, прямым объяснениям. Давайте разберемся и сделаем веб-скрапинг максимально простым!
Что такое Botright?
Botright Botright - это библиотека Python, которая помогает собирать данные с сайтов. Она построена на Playwright, популярном инструменте для автоматизации браузера. Botright вносит изменения, которые помогают избежать обнаружения. Многие сайты используют CAPTCHA и другие механизмы, чтобы блокировать ботов. Botright может решать некоторые CAPTCHA с помощью встроенных решателей. Он также меняет браузерные отпечатки. Из-за этого при проверке сведений о браузере сайтам сложнее распознать в вас бота.
Botright запускает настоящий браузер. Он может запускать Chromium или Firefox. Инструмент использует JavaScript для загрузки динамического контента. Это полезно, когда сайты подгружают данные по мере прокрутки страницы или взаимодействия с ней. Botright работает асинхронно. Это означает, что вы можете выполнять множество задач одновременно. Однако стоит учитывать, что его API не потокобезопасен. Это значит, что при одновременном запуске большого числа задач нужно быть осторожным. Лучший подход — использовать по одному экземпляру браузера на поток.
Установка и настройка Botright
Перед тем как начать скрейпинг, нужно установить Botright. В этом разделе шаги установки объясняются простыми словами.
Пререквизиты
Botright лучше всего работает с версиями Python ниже 3.10. Если у вас более новая версия, может потребоваться установить более старую. На компьютере можно установить несколько версий Python. Используйте виртуальное окружение для управления версией Python. Это поможет изолировать проекты друг от друга и избежать конфликтов.
Installation Steps
Установите Botright через pip:
Откройте терминал или командную строку. Выполните следующую команду, чтобы установить Botright:
pip install botright
Эта команда также установит Playwright как зависимость.
Download Browser Binaries:
После установки нужно загрузить необходимые бинарные файлы браузера. Запустите эту команду:
playwright install
Эта команда загрузит браузеры, которые будет использовать Botright.
Установите специальный браузер (необязательно):
Для более эффективного обхода антибот-защиты можно установить Ungoogled Chromium браузер. Это версия Chromium, ориентированная на конфиденциальность. Скачайте его с официальной страницы и установите в систему. Botright будет использовать его автоматически, если он установлен.
Настройте свой проект:
Create a new folder for your project. Inside this folder, create a new file called scraper.py. Use any code editor, such as VS Code or Sublime Text.
После установки Botright и настройки папки проекта можно приступать к написанию веб-скрейпера.
Создание базового веб-скрейпера с Botright
В этом разделе мы напишем простой скрейпер. Наша цель: извлечь данные о товарах с динамического сайта. Мы будем использовать Botright, чтобы загрузить страницу и извлечь данные.
Шаг 1: Импорт библиотек
Start by opening your scraper.py file. Import the necessary libraries. You will need asyncio for asynchronous programming, Botright for browser control, and csv to write data to a file. Write the following code:
импорт asyncio
импорт botright
импорт csv
Шаг 2: Создайте функцию скрейпера
Create a function called scrape_page that takes a page instance as input. This function will find all product elements on the page. Assume that each product is contained in a
async def scrape_page(страница):
# Select all elements with the product class
products = ожидайте page.query_selector_all(".product-item")
# Create a list to store the data
product_list = []
# Loop over each product element
для продукт в products:
# Get the product name, price, and image
name_element = ожидайте product.query_selector(".product-name")
price_element = ожидайте product.query_selector(".product-price")
image_element = ожидайте product.query_selector("img")
# Extract the text or attribute from each element
name = ожидайте name_element.inner_text()
price = ожидайте price_element.inner_text()
image_url = ожидайте image_element.get_attribute("src")
# Create a dictionary with the product data
product_data = {
"имя": name,
"цена": цена,
"изображение": image_url
}
# Add the data to the list
product_list.append(product_data)
# Return the complete list of products
возврат product_list
Шаг 3: Экспорт данных в CSV
После сбора данных о товарах их нужно сохранить. Вы можете экспортировать данные в CSV-файл. Добавьте функцию для записи данных в файл:
def save_to_csv(data):
# Define the CSV file name
filename = "products.csv"
# Define the field names that match the data keys
fieldnames = ["имя", "цена", "изображение"]
# Open the CSV file for writing
с открыть(filename, "w", newline="", кодировка="utf-8") в роли csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
# Write each product dictionary as a row in the CSV
для пункт в data:
writer.writerow(item)
печать("Данные сохранены в", filename)
Шаг 4: Собираем всё вместе
Now, you need to create a function that opens a browser, loads the page, and calls the scraping function. This function is called run_scraper:
async def run_scraper():
# Start Botright in headless mode
client = ожидайте botright.Botright(headless=Правда)
browser = ожидайте client.new_browser()
# Open a new page in the browser
страница = ожидайте browser.new_page()
# Navigate to the target website
ожидайте page.goto("https://example.com/products")
# Call the scraper function to get product data
products = ожидайте scrape_page(page)
# Save the data to a CSV file
save_to_csv(products)
# Close the browser
ожидайте client.close()
Наконец, запустите скрапер через цикл событий asyncio:
если __name__ == "__main__":
asyncio.run(run_scraper())
Этот код показывает базовый пример использования Botright для веб-скрейпинга. Он загружает страницу, извлекает данные о товарах и сохраняет их в CSV-файл.
Работа со страницами с бесконечной прокруткой
Многие современные сайты загружают данные по мере прокрутки вниз, и это называется бесконечной прокруткой. Botright поможет вам обработать этот сценарий. Его можно запрограммировать так, чтобы он прокручивал страницу вниз и загружал новый контент до самого конца.
Шаг 1: Определение функции прокрутки
Создайте функцию, которая прокручивает страницу. Она будет прокручивать её до низа и ждать загрузки нового контента. Вот пример:
async def auto_scroll(страница):
last_height = 0
в то время как Правда:
# Scroll to the bottom of the page
ожидайте page.evaluate("window.scrollTo(0, document.body.scrollHeight);")
# Подождите, пока загрузится новое содержимое
ожидайте page.wait_for_timeout(3000)
# Получение новой высоты после прокрутки
new_height = ожидайте page.evaluate("document.body.scrollHeight")
# Check if the page height has changed
если new_height == last_height:
# No new content is loaded; break the loop
перерыв
last_height = new_height
Шаг 2: Интегрируйте прокрутку в процесс сбора данных
Now, modify the run_scraper function to use the scrolling function before scraping. This ensures that all the products are loaded on the page.
async def run_scraper_infinite():
# Start Botright in headless mode
client = ожидайте botright.Botright(headless=Правда)
browser = ожидайте client.new_browser()
# Open a new page in the browser
страница = ожидайте browser.new_page()
# Navigate to the infinite scrolling page
ожидайте page.goto("https://example.com/infinite-products")
# Scroll down to load all content
ожидайте auto_scroll(page)
# Scrape the loaded page content
products = ожидайте scrape_page(page)
# Save the scraped data to a CSV file
save_to_csv(products)
# Close the browser
ожидайте client.close()
если __name__ == "__main__":
asyncio.run(run_scraper_infinite())
In this code, the auto_scroll function ensures the page is fully loaded. Then the scraper collects all the data. This method is useful when websites do not show all products at once.
Экспорт данных в CSV
После сбора данных их часто нужно сохранить для дальнейшего анализа. CSV (значения, разделённые запятыми) — это стандартный формат файла. Мы уже видели базовую функцию для сохранения данных в CSV. Давайте ещё раз разберём процесс.
- Сбор данных: Используйте Botright для сбора информации со страницы. Обычно данные хранятся в виде списка словарей.
- Определите формат CSV: Выберите имена полей. В нашем примере мы использовали «name», «price» и «image».
- Запись в CSV-файл: Open a new CSV file. Use Python’s csv.DictWriter to write the header and rows. This makes the CSV file ready for use in other applications like Excel.
Вот полная функция ещё раз:
def save_to_csv(data):
filename = "products.csv"
fieldnames = ["имя", "цена", "изображение"]
с открыть(filename, "w", newline="", кодировка="utf-8") в роли csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
для пункт в data:
writer.writerow(item)
печать("Данные сохранены в", filename)
Вы можете быстро и просто экспортировать собранные данные с помощью этой простой функции.
Обход CAPTCHA с помощью Botright
Многие сайты используют CAPTCHA, чтобы останавливать ботов. Botright включ��ет некоторые функции, которые помогают решать эти проверки. В этом разделе объясняется, как настроить Botright для обработки CAPTCHA.
Шаг 1: Напишите функцию для решения CAPTCHA
Создайте новый Python-файл или добавьте новую функцию в свой скрипт. Эта функция будет использовать встроенные методы Botright для прохождения CAPTCHA. В этом примере мы воспользуемся демонстрационной страницей Google reCAPTCHA.
импорт asyncio
импорт botright
async def solve_captcha():
# Start Botright in headless mode
client = ожидайте botright.Botright(headless=Правда)
browser = ожидайте client.new_browser()
# Open a new page in the browser
страница = ожидайте browser.new_page()
# Navigate to the reCAPTCHA demo page
ожидайте page.goto("https://www.google.com/recaptcha/api2/demo")
# Use Botright's built-in method to solve the CAPTCHA
ожидайте page.solve_recaptcha()
# Take a screenshot to check the result
ожидайте page.screenshot(path="captcha_solved.png")
# Print a message to show success
печать("CAPTCHA solved. Screenshot saved as captcha_solved.png.")
# Close the browser
ожидайте client.close()
если __name__ == "__main__":
asyncio.run(solve_captcha())
Шаг 2: Как это работает
В этом коде:
- Headless Mode: Botright работает в headless-режиме, поэтому браузер не открывает видимое окно. Иногда это помогает проходить CAPTCHA.
- Решение CAPTCHA: The function solve_recaptcha() is called on the page object. This uses image recognition libraries to solve the puzzle.
- Screenshot: После прохождения CAPTCHA делается скриншот. Это помогает проверить, что CAPTCHA действительно была решена.
Имейте в виду, что Botright может не справиться с каждой CAPTCHA. Его процент успешных попыток может варьироваться от 50% до 80%. Более сложные CAPTCHA по-прежнему могут блокировать ваши попытки.
Ограничения Botright
Botright — мощный инструмент, но у него есть некоторые ограничения, о которых стоит знать.
- Python Version Compatibility: Botright не поддерживает версии Python новее 3.10. Чтобы избежать конфликтов, следует использовать Python 3.9 или ниже.
- Thread Safety: API не потокобезопасен. Если вы запускаете несколько задач сбора данных одновременно, для каждой задачи нужно запускать отдельный экземпляр браузера. Иначе возможны ошибки или взаимные блокировки.
- Advanced Anti-Bot Systems: Botright справляется с базовыми антиботовыми мерами. Однако он испытывает трудности с продвинутыми системами вроде Cloudflare, Akamai и других сервисов защиты высокого уровня. Эти системы всё равно могут блокировать ваши запросы.
- CAPTCHA Success Rate: Встроенные решатели CAPTCHA хорошо работают со многими стандартными CAPTCHA. Однако они могут не справляться с более сложными вариантами, такими как Geetest. Это означает, что ваша задача скрейпинга может не завершаться успешно каждый раз.
Заключение
Итак, мы рассмотрели все, что нужно знать, чтобы начать работать с Botright для веб-скрапинга. Мы объяснили, как его установить, написать код, обработать бесконечную прокрутку, экспортировать данные и решать CAPTCHA. Botright помогает собирать данные с сайтов, имитируя действия обычного пользователя. Мы также упомянули его ограничения и рассмотрели альтернативы. Теперь у вас есть базовые знания, чтобы начать собственные проекты по сбору данных. Эти навыки можно использовать, чтобы собирать данные с множества разных сайтов.

