Як використовувати Botright для вебскрапінгу

Як використовувати Botright для вебскрапінгу?

У цьому посібнику я покроково покажу, як користуватися Botright. Ми розглянемо його найкращі можливості, як встановити його, написати простий код і навіть розібратися з тими складними CAPTCHAs. Не хвилюйтеся, якщо ви лише починаєте займатися вебскрапінгом — цю статтю легко читати завдяки чітким і зрозумілим поясненням. Давайте зануримося в тему й зробимо вебскрапінг простим!

Що таке Botright?

Botright Це бібліотека Python, яка допомагає вам виконувати вебскрапінг сайтів. Вона побудована на основі Playwright, популярного інструмента для автоматизації браузера. Botright вносить певні зміни, які допомагають уникати виявлення. Багато сайтів використовують CAPTCHA та інші механізми, щоб блокувати ботів. Botright може розв'язувати деякі CAPTCHA за допомогою вбудованих розв'язувачів. Вона також змінює відбитки браузера. Це робить її менш схожою на бота, коли сайти перевіряють дані вашого браузера.

Botright запускає справжній браузер. Він може запускати Chromium або Firefox. Інструмент використовує JavaScript для завантаження динамічного вмісту. Це корисно, коли сайти підвантажують дані під час прокручування або взаємодії зі сторінкою. Botright працює асинхронно. Це означає, що ви можете виконувати багато завдань одночасно. Однак варто пам’ятати, що його API не є потокобезпечним. Це означає, що під час одночасного запуску багатьох завдань потрібно бути обережним. Найкращий підхід — запускати один екземпляр браузера на кожен потік.

Встановлення та налаштування Botright

Перш ніж почати вебскрапінг, потрібно встановити Botright. У цьому розділі простими словами пояснюються кроки встановлення.

Prerequisites

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:

import asyncio
import botright
import 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

з класом під назвою “product-item”. Напишіть такий код:
async def scrape_page(page):
# Select all elements with the product class
products = await page.query_selector_all(".product-item")
# Create a list to store the data
product_list = []
# Loop over each product element
for product in products:
# Get the product name, price, and image
name_element = await product.query_selector(".product-name")
price_element = await product.query_selector(".product-price")
image_element = await product.query_selector("img")
# Extract the text or attribute from each element
name = await name_element.inner_text()
price = await price_element.inner_text()
image_url = await image_element.get_attribute("src")
# Create a dictionary with the product data
product_data = {
"name": name,
"price": price,
"image": image_url
}
# Add the data to the list
product_list.append(product_data)
# Return the complete list of products
return 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 = ["name", "price", "image"]
# Open the CSV file for writing
with open(filename, "w", newline="", encoding="utf-8") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
# Write each product dictionary as a row in the CSV
for item in data:
writer.writerow(item)
print("Дані збережено у", 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 = await botright.Botright(headless=True)
browser = await client.new_browser()
# Open a new page in the browser
page = await browser.new_page()
# Navigate to the target website
await page.goto("https://example.com/products")
# Call the scraper function to get product data
products = await scrape_page(page)
# Save the data to a CSV file
save_to_csv(products)
# Close the browser
await client.close()

Нарешті, запустіть вебскрапер через цикл подій asyncio:

if __name__ == "__main__":
asyncio.run(run_scraper())

Цей код показує базовий приклад використання Botright для вебскрапінгу. Він завантажує сторінку, витягує товарні дані та зберігає їх у файл CSV.

Робота зі сторінками з нескінченним прокручуванням

Багато сучасних вебсайтів завантажують дані під час прокручування вниз, і цю функцію називають нескінченним прокручуванням. Botright допоможе вам упоратися з нею. Ви можете запрограмувати його так, щоб він прокручував сторінку вниз і завантажував новий вміст аж до її кінця.

Крок 1: Визначте функцію прокручування

Створіть функцію, яка прокручує сторінку. Ця функція прокрутить донизу та зачекає, поки завантажиться новий контент. Ось приклад:

async def auto_scroll(page):
last_height = 0
while True:
# Scroll to the bottom of the page
await page.evaluate("window.scrollTo(0, document.body.scrollHeight);")
# Wait for new content to load
await page.wait_for_timeout(3000)
# Get the new height after scrolling
new_height = await page.evaluate("document.body.scrollHeight")
# Check if the page height has changed
if new_height == last_height:
# No new content is loaded; break the loop
break
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 = await botright.Botright(headless=True)
browser = await client.new_browser()
# Open a new page in the browser
page = await browser.new_page()
# Navigate to the infinite scrolling page
await page.goto("https://example.com/infinite-products")
# Scroll down to load all content
await auto_scroll(page)
# Scrape the loaded page content
products = await scrape_page(page)
# Save the scraped data to a CSV file
save_to_csv(products)
# Close the browser
await client.close()
if __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 (Comma Separated Values) — це стандартний формат файлу. Ми вже бачили базову функцію для збереження даних у CSV. Давайте розглянемо процес.

  1. Зберіть дані: Використайте Botright, щоб зібрати інформацію з вебсторінки. Дані зазвичай зберігаються у вигляді списку словників.
  2. Визначте формат CSV: Виберіть назви полів. У нашому прикладі ми використали “name”, “price” і “image”.
  3. Запис у файл 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 = ["name", "price", "image"]
with open(filename, "w", newline="", encoding="utf-8") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for item in data:
writer.writerow(item)
print("Дані збережено у", filename)

Ви можете швидко й легко експортувати зібрані дані за допомогою цієї простої функції.

Обхід CAPTCHA за допомогою Botright

Багато сайтів використовують CAPTCHA, щоб зупиняти ботів. Botright містить деякі функції, які можуть допомогти розв’язувати ці головоломки. У цьому розділі пояснюється, як налаштувати Botright для роботи з CAPTCHA.

Крок 1: Напишіть функцію для розв'язання CAPTCHA

Створіть новий файл Python або додайте нову функцію до свого скрипта. Ця функція використовуватиме вбудовані методи Botright для розв'язання CAPTCHA. У цьому прикладі ми використаємо демонстраційну сторінку Google reCAPTCHA.

import asyncio
import botright
async def solve_captcha():
# Start Botright in headless mode
client = await botright.Botright(headless=True)
browser = await client.new_browser()
# Open a new page in the browser
page = await browser.new_page()
# Navigate to the reCAPTCHA demo page
await page.goto("https://www.google.com/recaptcha/api2/demo")
# Use Botright's built-in method to solve the CAPTCHA
await page.solve_recaptcha()
# Take a screenshot to check the result
await page.screenshot(path="captcha_solved.png")
# Print a message to show success
print("CAPTCHA solved. Screenshot saved as captcha_solved.png.")
# Close the browser
await client.close()
if __name__ == "__main__":
asyncio.run(solve_captcha())

Крок 2: Як це працює

У цьому коді:

  • Headless Mode: Botright працює в безголовому режимі, тож браузер не відкриває видиме вікно. Це іноді може допомогти в розв'язанні 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. Це означає, що ваше завдання вебскрапінгу може вдаватися не завжди.

Conclusion

Отже, ми розглянули все, що потрібно знати, щоб почати працювати з Botright для вебскрапінгу. Ми пояснили, як його встановити, писати код, обробляти нескінченне прокручування, експортувати дані та розв'язувати CAPTCHA. Botright допомагає вам скрапити сайти, імітуючи поведінку людини. Ми також згадали його обмеження та розглянули альтернативи. Тепер у вас є базові знання, щоб почати свої проєкти з вебскрапінгу. Ви можете використовувати ці навички, щоб збирати дані з багатьох різних сайтів.

Схожі записи