Як обробляти пагінацію за допомогою Selenium WebDriver
У цьому посібнику я проведу вас через роботу з пагінацією за допомогою Selenium WebDriver та Python. Ми розглянемо різні методи: від вебскрапінгу сайтів із простими панелями навігації до роботи зі складнішими сценаріями, як-от нескінченне прокручування та кнопки «Load More». Незалежно від того, чи ви вебскрапите списки товарів, чи будь-який інший тип даних, розуміння того, як працювати з пагінацією, допоможе вам ефективно зібрати дані з усього сайту. Почнімо!
Простіша пагінація з Web Scraper API від Bright Data
Обробка пагінації за допомогою Selenium може бути повільною і схильною до блокувань. Web Scraper API від Bright Data автоматизує процес, самостійно обробляючи пагінацію, проксі та CAPTCHA за вас.
✅ Auto-pagination — Не потрібно натискати «Next» або змінювати URL-адреси
✅ Обхід блокувань — Вбудована ротація проксі та Розв’язання CAPTCHA
✅ Швидше та краще масштабується — Витягуйте структуровані дані без завантаження повних сторінок
I am not не пов’язані з жодним із постачальників, згаданих тут!
Обробка пагінації за допомогою панелей навігації
Найпоширеніша форма пагінації — це панель навігації, де користувач може натиснути «Далі» або перейти до конкретної сторінки за її номером. Ви можете збирати дані з цих сторінок за допомогою Selenium, автоматизувавши натискання кнопки «Далі» або змінюючи номер сторінки в URL.
Вебскрапінг даних за допомогою кнопки «Наступна сторінка»
Let’s say you’re scraping product data from a website like ScrapingCourse.com, which has a simple navigation bar. You can automate clicks on the “Next” button to scrape multiple pages.
Step-by-Step Implementation
Відкрийте вебсайт і проаналізуйте структуру сторінки
Спочатку завантажте вебсторінку за допомогою Selenium і проаналізуйте структуру HTML, щоб визначити елементи, які містять дані, що ви хочете зібрати. Зазвичай товари розміщені в певних HTML-тегах або класах.
Витягніть дані з першої сторінки
Використайте Selenium, щоб витягти дані з першої сторінки. Наприклад, можна витягти назви товарів і ціни:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.scrapingcourse.com/ecommerce/")
product_containers = driver.find_elements(By.CLASS_NAME, "woocommerce-LoopProduct-link")
for product in product_containers:
name = product.find_element(By.CLASS_NAME, "woocommerce-loop-product__title")
price = product.find_element(By.CLASS_NAME, "price")
print(name.text)
print(ціна.text)
driver.quit()
Implement Pagination Logic
Далі додайте логіку для натискання кнопки «Next» і вебскрапінгу даних із наступних сторінок. Використайте цикл `while`, щоб продовжувати вебскрапінг, доки не буде більше доступних сторінок:
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException
chrome_options = Options()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://www.scrapingcourse.com/ecommerce/")
def scraper():
product_containers = driver.find_elements(By.CLASS_NAME, "woocommerce-LoopProduct-link")
for product in product_containers:
name = product.find_element(By.CLASS_NAME, "woocommerce-loop-product__title")
price = product.find_element(By.CLASS_NAME, "price")
print(name.text)
print(ціна.text)
while True:
scraper()
try:
next_page = driver.find_element(By.CLASS_NAME, "next.page-numbers")
next_page.click()
except NoSuchElementException:
print(«Більше сторінок немає.»)
break
driver.quit()
Цей підхід автоматично натискає кнопку «Next», щоб зібрати дані з усіх сторінок до кінця.
Вебскрапінг через зміну номера сторінки в URL
Деякі сайти кодують номер сторінки прямо в URL. Замість того щоб натискати кнопку «Далі», можна змінити номер сторінки в URL і перезавантажити сторінку, щоб зібрати наступний набір даних.
Наприклад, якщо URL має вигляд https://www.scrapingcourse.com/ecommerce/page/1, Можна збільшити номер сторінки й завантажити нову сторінку:
page_count = 1
max_page_count = 13
for page in range(1, max_page_count 1):
driver.get(f"https://www.scrapingcourse.com/ecommerce/page/{page}")
scraper()
Цей спосіб простий, але вимагає знати структуру URL-адрес вебсайту.
Handling JavaScript Pagination
Багато вебсайтів використовують пагінацію на JavaScript, яка динамічно завантажує додатковий контент. Такий тип пагінації зазвичай передбачає функції на кшталт нескінченного прокручування або кнопок «Load More».
Infinite Scrolling Pagination
Сайти з нескінченним прокручуванням автоматично підвантажують новий контент, коли користувач прокручує сторінку донизу. Щоб зібрати дані з таких сторінок, у скрипті Selenium потрібно імітувати прокручування.
Step-by-Step Implementation
Налаштуйте WebDriver
Налаштуйте WebDriver у headless-режимі, щоб збирати дані без відкриття вікна браузера:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
chrome_options = Options()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://scrapingclub.com/exercise/list_infinite_scroll/")
Прокрутіть вниз і зберіть дані
Використайте JavaScript, щоб прокрутити сторінку до самого низу. Після кожної прокрутки зачекайте, доки завантажиться новий вміст, а потім зберіть дані зі сторінки:
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
# Now, scrape the content
products = driver.find_elements(By.CLASS_NAME, "post")
for product in products:
name = product.find_element(By.CSS_SELECTOR, "h4 a").text
price = product.find_element(By.CSS_SELECTOR, "h5").text
print(f"Name: {name}")
print(f"Price: {price}")
Цей метод імітує прокручування та очікує завантаження нових товарів.
Пагінація через кнопку «Завантажити ще»
Деякі вебсайти використовують кнопку «Load More», щоб показати більше контенту після натискання. Це ще одна форма пагінації на JavaScript.
Step-by-Step Implementation
Налаштуйте WebDriver
Відкрийте вебсайт за допомогою Selenium і визначте функцію вебскрапера для вилучення назв товарів та їхніх ID:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.3m.com.au/3M/en_AU/p/c/medical/")
driver.implicitly_wait(10)
Натисніть кнопку «Завантажити ще»
Використайте цикл, щоб натискати кнопку «Load More» і збирати контент після кожного натискання:
def scraper():
product_containers = driver.find_elements(By.CLASS_NAME, "sps2-content")
for product in product_containers:
name = product.find_element(By.CLASS_NAME, "sps2-content_name")
item_id = product.find_element(By.CLASS_NAME, "sps2-content_data - number")
print(f"Name: {name.text}")
print(f"Product ID: {item_id.text}")
scroll_count = 5
for _ in range(scroll_count):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
load_more = driver.find_element(By.CLASS_NAME, "mds-button_tertiary - medium")
load_more.click()
scraper()
Цей метод імітує багаторазове натискання кнопки “Load More”, що дає змогу збирати дані, поки сторінка підвантажує новий контент.
Як уникнути виявлення під час вебскрапінгу
Вебскрапінг може запускати антибот-захист, який здатен заблокувати вашу IP-адресу або завадити збиранню контенту. Щоб уникнути блокування, скористайтеся такими стратегіями:
1. Use Proxies
Ротація проксі допомагає уникнути виявлення, маскуючи вашу IP-адресу. Такі сервіси, як Bright Data, пропонують ротацію проксі разом з іншими інструментами, як-от обхід CAPTCHA.
2. Імітуйте поведінку реального користувача
Використовуючи такі методи, як ротація user agent, додавання випадкових затримок між діями та застосування headless-браузерів, ви можете зробити свою поведінку під час вебскрапінгу більш схожою на поведінку реального користувача.
3. Використовуйте API для вебскрапінгу
Якщо вебскрапінг блокується, розгляньте використання API для вебскрапінгу. Вони автоматично обробляють проксі, CAPTCHA та інші антиботові механізми, що полегшує збирання контенту без блокувань. Перегляньте мій повний список найкращі API для вебскрапінгу.
Conclusion
Пагінація є важливою складовою вебскрапінгу, а за допомогою Selenium ви легко можете працювати з різними її типами, як-от панелі навігації, номери сторінок, нескінченне прокручування та кнопки “Load More”. Ці методи допомагають безперешкодно збирати дані з багатосторінкових сайтів.
Також важливо подбати про антиботові заходи. Щоб уникнути блокування, чергуйте рядки User-Agent, використовуйте проксі та додавайте затримки між діями, імітуючи поведінку людини під час перегляду. Завдяки цим технікам ви зможете ефективно збирати дані без жодних проблем. Успіхів у вебскрапінгу!

