Вебскрапінг за допомогою Selenium

Вебскрапінг за допомогою Selenium: покроковий посібник

Selenium дає змогу взаємодіяти з вебсторінками так само, як це робив би звичайний користувач. Я можу натискати кнопки, заповнювати форми і навіть обробляти вміст, що завантажується після початкового завантаження сторінки. Це особливо корисно, коли мені потрібно зібрати дані зі складних сайтів, з якими інші інструменти не можуть впоратися.

Що таке Selenium?

Selenium — це інструмент автоматизації з відкритим кодом, який переважно використовують для тестування вебзастосунків. Він імітує дії реального користувача, що взаємодіє з вебсайтом, тому є чудовим вибором для вебскрапінг динамічних сторінок які значною мірою залежать від JavaScript.

Unlike статичні HTML-сторінки, де дані можна легко отримати за допомогою традиційних методів вебскрапінгу, як-от BeautifulSoup or Scrapy, для динамічних сторінок потрібне більш надійне рішення, щоб відображати та взаємодіяти з вмістом — саме в цьому сила Selenium.

Навіщо використовувати Selenium для вебскрапінгу?

Handling JavaScript: Багато сучасних вебсайтів завантажують контент динамічно за допомогою JavaScript. Традиційні інструменти для вебскрапінгу часто тут не спрацьовують, бо отримують лише початковий HTML. Selenium, однак, може виконувати JavaScript, що дає змогу збирати дані, які з’являються лише після повного завантаження сторінки.

User Interaction Simulation: Selenium може імітувати дії користувача, як-от натискання кнопок, заповнення форм і прокручування сторінок. Це критично важливо для вебскрапінгу даних, який потребує таких взаємодій, наприклад завантаження додаткового вмісту через нескінченне прокручування.

Headless Browsing: Selenium підтримує headless-режим перегляду, що означає, що ви можете запускати браузер без графічного інтерфейсу користувача (GUI). Це особливо корисно для запуску автоматизованих скрапінг-скриптів у production-середовищах.

Найкращі альтернативи Selenium

  1. Вебскрапінг за допомогою API — використання API для вебскрапінгу може заощадити багато часу й ресурсів, читайте більше тут.
  2. Web scraping with Node.js — One of the easiest ways to scrape websites, читайте більше тут.
  3. Вебскрапінг за допомогою AI — що може бути кращим за використання потужності AI для покращення ваших операцій вебскрапінгу? Дізнатися більше тут.
  4. Використовуйте інструменти для вебскрапінгу — застосовуйте спеціалізовані інструменти для вебскрапінгу, які допоможуть заощадити час і гроші. Дізнатися більше тут.

Setting Up Selenium

Перш ніж переходити до прикладів, потрібно налаштувати Selenium у вашому середовищі Python. Ось короткий посібник:

Install Selenium:

pip install selenium

Завантажте WebDriver: Selenium потребує WebDriver to interact with browsers. WebDrivers are specific to each browser (e.g., ChromeDriver for Google Chrome, GeckoDriver for Firefox).

Налаштування WebDriver: Після завантаження переконайтеся, що WebDriver доступний через PATH вашої системи. Або ж ви можете вказати шлях до WebDriver безпосередньо у своєму скрипті.

Базовий приклад вебскрапінгу

Тепер розгляньмо базовий приклад, у якому ми збиратимемо дані з вебсайту за допомогою Selenium.

Крок 1: Імпортуйте потрібні бібліотеки

from selenium import webdriver
from selenium.webdriver.common.by import By

Крок 2: Налаштуйте WebDriver

# Make sure to replace 'path/to/chromedriver' with the actual path to your ChromeDriver
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

Крок 3: Відкрийте вебсторінку

driver.get("https://example.com")

Крок 4: Взаємодія з вебсторінкою

# Let’s assume we want to scrape all article titles from a blog page

titles = driver.find_elements(By.CLASS_NAME, 'article-title')
for title in titles:
print(title.text)

Крок 5: Закрийте браузер

driver.quit()

Цей простий скрипт демонструє, як відкрити вебсторінку, знайти елементи за назвою їхнього класу та витягти з них текст.

Handling Dynamic Content

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

Приклад: збирання даних після прокручування

Деякі сайти завантажують додатковий вміст, коли ви прокручуєте сторінку вниз. Selenium може імітувати прокручування, що дає змогу зібрати всі дані, а не лише ті, які видно спочатку.

from selenium.webdriver.common.keys import Keys
# Scroll down the page
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
# Wait for content to load
import time
time.sleep(2) # Adjust the sleep time based on the website's loading speed
# Scrape the newly loaded content
new_content = driver.find_elements(By.CLASS_NAME, 'new-content-class')
for item in new_content:
print(item.text)

Обробка відправлення форм і кліків по кнопках

Selenium дає змогу взаємодіяти з різними елементами на сторінці, як-от форми та кнопки. Ось приклад, у якому ми імітуємо надсилання форми:

# Locate the input fields and submit button
username = driver.find_element(By.NAME, 'username')
password = driver.find_element(By.NAME, 'password')
submit_button = driver.find_element(By.ID, 'submit')
# Enter data into the form fields
username.send_keys("myUsername")
password.send_keys("myPassword")
# Click the submit button
submit_button.click()
# Wait for the next page to load
time.sleep(3)
# Scrape data from the next page
result = driver.find_element(By.ID, 'result')
print(result.text)

Робота зі спливаючими вікнами та сповіщеннями

Вебсторінки часто містять спливаючі вікна або сповіщення, які можуть заважати вашому вебскрапінгу. Selenium також може впоратися з ними:

# Handling an alert pop-up
alert = driver.switch_to.alert
alert.accept() # To accept the alert
# alert.dismiss() # To dismiss the alert

Безголовий перегляд для швидшого вебскрапінгу

Запуск браузера в безголовому режимі може пришвидшити процес вебскрапінгу, особливо під час запуску скриптів на сервері. Ось як це налаштувати:

from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(executable_path='/path/to/chromedriver', options=options)

Найкращі практики вебскрапінгу з Selenium

Хоча Selenium є потужним інструментом, важливо дотримуватися найкращих практик, щоб уникнути проблем:

  1. Respect Website’s Robots.txt: Before scraping, check the website’s robots.txt file to ensure you’re not violating their policies.
  2. Use Random Delays: Щоб уникнути виявлення як бота, використовуйте випадкові затримки між діями:
import random
time.sleep(random.uniform(2, 5))
  1. Уникайте перевантаження сервера: Не робіть забагато запитів за короткий час. Це може перевантажити сервер і призвести до блокування вашої IP-адреси.
  2. Чергуйте IP-адреси та User-Agents: Для великомасштабного вебскрапінгу варто розглянути ротацію IP-адрес і рядків user-agent, щоб зменшити ризик блокування.
  3. Handle Exceptions Gracefully: Завжди обробляйте винятки, як-от тайм-аути та помилки «елемент не знайдено», щоб ваш скрипт не аварійно завершував роботу.

Conclusion

Вебскрапінг Selenium дає мені змогу витягувати дані зі складних і динамічних сайтів. Його трохи складніше опанувати, ніж деякі інші інструменти, але результат того вартий. За допомогою Selenium я можу імітувати реальні дії користувача, тож це справжній game-changer для всіх, хто занурюється в data science або веброзробку. Дотримуючись найкращих практик і справді використовуючи Selenium на повну, я можу створювати надійні, стійкі вебскрапери, які точно відповідають моїм потребам.

Хочете обійтися без вебскрапінгу? Ознайомтеся з моїм списком провідні постачальники наборів даних!

Схожі записи