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