Как обрабатывать пагинацию с помощью Selenium WebDriver

Как работать с пагинацией с помощью 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 не аффилирован с любым из упомянутых здесь провайдеров!

Работа с пагинацией через панели навигации

Самая распространенная форма пагинации — это панель навигации, где пользователь может нажать «Next» или перейти на конкретную страницу с помощью номеров страниц. Вы можете собирать данные с этих страниц с помощью Selenium, автоматизируя нажатия на кнопку следующей страницы или изменяя номер страницы в URL.

Сбор данных с помощью кнопки «Next Page»

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, чтобы извлечь данные с первой страницы. Например, можно получить названия товаров и цены:

с сайта селен импорт webdriver
с сайта selenium.webdriver.common.by импорт По ссылке
с сайта selenium.webdriver.chrome.options импорт Опции
chrome_options = Опции()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.получить("https://www.scrapingcourse.com/ecommerce/")
product_containers = driver.find_elements(По ссылке.CLASS_NAME, "woocommerce-LoopProduct-link")
для продукт в product_containers:
name = product.find_element(По ссылке.CLASS_NAME, "woocommerce-loop-product__title")
price = product.find_element(По ссылке.CLASS_NAME, "цена")
печать(name.текст)
печать(price.текст) driver.quit()

Implement Pagination Logic

Затем добавьте логику, которая нажимает кнопку «Next» и собирает данные со следующих страниц. Используйте цикл while, чтобы продолжать сбор данных, пока страницы не закончатся:

с сайта selenium.webdriver.common.by импорт По ссылке
с сайта selenium.webdriver.chrome.options импорт Опции
с сайта selenium.common.exceptions импорт NoSuchElementException
chrome_options = Опции()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.получить("https://www.scrapingcourse.com/ecommerce/") def скребок():
product_containers = driver.find_elements(По ссылке.CLASS_NAME, "woocommerce-LoopProduct-link")
для продукт в product_containers:
name = product.find_element(По ссылке.CLASS_NAME, "woocommerce-loop-product__title")
price = product.find_element(По ссылке.CLASS_NAME, "цена")
печать(name.текст)
печать(price.текст)
в то время как Правда:
скребок()
попробуйте:
next_page = driver.find_element(По ссылке.CLASS_NAME, "next.page-numbers")
next_page.clickза исключением () NoSuchElementException:
печать("Больше страниц нет.")
перерыв
driver.quit()

Этот подход автоматически нажимает кнопку «Next», чтобы собрать данные со всех страниц до конца.

Сбор данных при изменении номера страницы в URL

Некоторые сайты кодируют номер страницы прямо в URL. Вместо нажатия кнопки «Next» можно изменить номер страницы в URL и перезагрузить страницу, чтобы собрать следующий набор данных.

Например, если URL выглядит так https://www.scrapingcourse.com/ecommerce/page/1, вы можете увеличивать номер страницы и загружать новую страницу:

page_count = 1
max_page_count = 13
для страница в ассортимент(1, max_page_count   1): driver.получить(f"https://www.scrapingcourse.com/ecommerce/page/{page}")
скребок()

Этот метод прост, но требует знать структуру URL сайта.

Handling JavaScript Pagination

Многие сайты используют пагинацию на основе JavaScript, которая динамически подгружает больше контента. Такой тип пагинации обычно включает бесконечную прокрутку или кнопки «Показать еще».

Infinite Scrolling Pagination

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

Step-by-Step Implementation

Настройте WebDriver

Настройте WebDriver в headless-режиме, чтобы собирать данные без открытия окна браузера:

с сайта селен импорт webdriver
с сайта selenium.webdriver.chrome.options импорт Опции
импорт time
chrome_options = Опции()
chrome_options.add_argument(" - headless")
driver = webdriver.Chrome(options=chrome_options)
driver.получить("https://scrapingclub.com/exercise/list_infinite_scroll/")

Прокрутка вниз и сбор данных

Используйте JavaScript, чтобы прокрутить страницу до самого низа. После каждой прокрутки дождитесь загрузки нового контента, а затем собирайте данные со страницы:

last_height = driver.execute_script("return document.body.scrollHeight")
в то время как Правда: driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.спать(2)
new_height = driver.execute_script("return document.body.scrollHeight")
если new_height == last_height:
перерыв
last_height = new_height
# Now, scrape the content
products = driver.find_elements(По ссылке.CLASS_NAME, "post")
для продукт в продукция:
name = product.find_element(По ссылке.CSS_SELECTOR, "h4 a").текст
price = product.find_element(По ссылке.CSS_SELECTOR, "h5").текст
печать(f"Name: {name}")
печать(f"Price: {price}")

Этот метод имитирует прокрутку и ждёт загрузки новых товаров.

Пагинация с кнопкой «Load More»

На некоторых сайтах для показа дополнительного контента используется кнопка «Load More». Это еще одна форма пагинации на JavaScript.

Step-by-Step Implementation

Настройте WebDriver

Откройте сайт с помощью Selenium и задайте функцию-скрапер для извлечения названий товаров и ID:

с сайта селен импорт webdriver
с сайта selenium.webdriver.common.by импорт По ссылке
импорт time
driver = webdriver.Chrome() driver.получить("https://www.3m.com.au/3M/en_AU/p/c/medical/") driver.implicitly_wait(10)

Нажмите кнопку «Load More»

Используйте цикл, чтобы нажимать кнопку «Показать еще» и собирать контент после каждого клика:

def скребок():
product_containers = driver.find_elements(По ссылке.CLASS_NAME, "sps2-content")
для продукт в product_containers:
name = product.find_element(По ссылке.CLASS_NAME, "sps2-content_name")
item_id = product.find_element(По ссылке.CLASS_NAME, "sps2-content_data - number")
печать(f"Name: {name.text}")
печать(f"Product ID: {item_id.text}")
scroll_count = 5
для _ в ассортимент(scroll_count):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.спать(5)
load_more = driver.find_element(По ссылке.CLASS_NAME, "mds-button_tertiary - medium")
load_more.click()
скребок()

Этот метод имитирует многократное нажатие кнопки «Load More», позволяя собирать данные по мере подгрузки нового контента на странице.

Как избежать обнаружения при сборе данных

Веб-скрапинг может вызывать срабатывание антибот-механизмов, из-за чего ваш IP-адрес могут заблокировать или вам могут помешать собирать контент. Чтобы избежать блокировки, вот несколько стратегий:

1. Use Proxies

Ротация прокси помогает избежать обнаружения, маскируя ваш IP-адрес. Сервисы вроде Bright Data предлагают ротацию прокси вместе с другими инструментами, такими как обход CAPTCHA.

2. Имитируйте поведение реального пользователя

Используя такие техники, как смена user-agent, случайные задержки между действиями и headless-браузеры, можно сделать действия при скрейпинге более похожими на действия реального пользователя.

3. Используйте API для веб-скрапинга

Если парсинг блокируется, рассмотрите использование API для веб-скрейпинга. Они автоматически обрабатывают прокси, CAPTCHA и другие антибот-механизмы, упрощая сбор контента без риска блокировок. Посмотрите мой полный список лучшие API для веб-скрейпинга.

Заключение

Пагинация — ключевая часть веб-скрапинга, и в Selenium вы можете легко управлять разными ее типами: навигационными панелями, номерами страниц, бесконечной прокруткой и кнопками «Load More». Эти методы помогают без проблем извлекать данные с сайтов с несколькими страницами.

Также важно учитывать антибот-механизмы. Чтобы избежать блокировки, ротируйте user agent, используйте прокси и добавляйте задержки между действиями, чтобы имитировать поведение человека при просмотре страниц. С помощью этих техник вы сможете эффективно собирать данные без лишних проблем. Удачного скрейпинга!

Похожие записи