Получение данных с скрытой вкладки на сайте с использованием Python

Вопрос или проблема

Я использую bs4 и selenium для парсинга сайта аукционов недвижимости (URL https://bid.hertz.ag/ui/auctions/112571/14320874), и у меня возникли проблемы с парсингом даты аукциона и ссылок на attachments в вкладках ‘BIDS’ и ‘DOCS’. Я думаю, что это связано с тем, что сайт распознает машину, симулирующую клик на вкладке, потому что мой скраппер распознает вкладку, на которую нужно кликнуть, но всегда завершает работу перед тем, как это сделать.

Я использовал безголовый браузер, применял .scrollIntoView() для вкладки, пробовал time.sleep(), чтобы создать впечатление, что человек ждет, чтобы кликнуть на вкладку, и не могу понять, как получить возвращаемую информацию.

Есть ли у кого-нибудь предложения, как это обойти?

Ответ или решение

Вопрос веб-скрапинга является актуальной задачей для специалистов в сфере ИТ, особенно когда речь идет о взаимодействии с динамическими сайтами, такими как терминалы для аукционов. Необходимо учитывать ряд аспектов при использовании инструментов, таких как BeautifulSoup и Selenium для извлечения данных из скрытых вкладок на сайтах, как в вашем случае.

1. Понять Структуру Страницы

Прежде всего, необходимо проанализировать структуру целевой страницы. Это можно сделать, используя инструменты разработчика в браузере (F12). Обратите внимание на элементы DOM, которые представляют собой вкладки "BIDS" и "DOCS". Обычно они связаны с JavaScript-скриптами, которые могут блокировать доступ к содержимому, если клик осуществляется слишком быстро или выглядит подозрительно для сайта.

2. Установка Selenium

Убедитесь, что вы правильно установили библиотеку Selenium и необходимые драйверы для вашего браузера. Например, для Chrome вам понадобится ChromeDriver, который должен соответствовать версии вашего браузера.

pip install selenium

3. Код для Взаимодействия с Вкладками

Рассмотрим следующий код, который позволяет кликнуть на необходимые вкладки и извлечь данные из них:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# Инициализация веб-драйвера
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--headless')  # Если вы не хотите видеть окно браузера
driver = webdriver.Chrome(options=options)

try:
    # Переход на страницу аукциона
    driver.get('https://bid.hertz.ag/ui/auctions/112571/14320874')

    # Подождите, пока страница полностью загрузится
    time.sleep(5)  # Настройте время ожидания в зависимости от скорости сети

    # Кликните на вкладку BIDS
    bids_tab = driver.find_element(By.XPATH, "//div[contains(text(), 'BIDS')]")
    bids_tab.click()
    time.sleep(2)  # Задержка для полной загрузки содержимого вкладки

    # Извлечение данных о дате аукциона
    auction_date = driver.find_element(By.XPATH, "//div[@class='auction-date']").text  # Поменяйте XPATH на соответствующий
    print("Auction Date:", auction_date)

    # Кликните на вкладку DOCS
    docs_tab = driver.find_element(By.XPATH, "//div[contains(text(), 'DOCS')]")
    docs_tab.click()
    time.sleep(2)  # Задержка для полной загрузки содержимого вкладки

    # Извлечение ссылок на документы
    docs_links = driver.find_elements(By.XPATH, "//a[@class='doc-link']")  # Поменяйте XPATH на соответствующий
    for link in docs_links:
        print("Document Link:", link.get_attribute('href'))

finally:
    driver.quit()

4. Рекомендации по Устойчивости Кода

  • Обработка Исключений: Оберните ваши клики и извлечения в блоки try-except, чтобы избежать полного прерывания выполнения в случае ошибки.
  • Увеличение Задержек: Если сайт все еще блокирует доступ, попробуйте использовать более длинные задержки с time.sleep(), или используйте ожидания WebDriverWait, которые более надежны для асинхронных загрузок страниц.
  • Адаптация Стратегий Клика: Если обычный клик не срабатывает, используйте JavaScript для ручного выполнения клика (например, driver.execute_script("arguments[0].click();", element)).

5. Заключение

Веб-скрапинг — это тонкая задача, требующая точности и понимания взаимодействия с динамическими веб-страницами. Применяя описанные методы и рекомендации, вы сможете эффективно извлекать необходимые данные из вкладок на целевом сайте. Не забывайте о легальности и этичности веб-скрапинга, ознакомьтесь с политикой сайта перед началом работы.

Оцените материал
Добавить комментарий

Капча загружается...