Я пытаюсь получить ссылки на мероприятия и контактную информацию с веб-сайта RaceRoster (https://raceroster.com/search?q=5k&t=upcoming), используя Python, запросы, Pandas и BeautifulSoup. Цель состоит в том, чтобы извлечь название события, URL-адрес события, имя контактного лица и адрес электронной почты для каждого события и сохранить данные в файл Excel, чтобы мы могли обращаться к этим событиям в целях развития бизнеса.
Однако скрипт постоянно сообщает, что на странице результатов поиска не обнаружено ссылок на события, несмотря на то, что ссылки видны при проверке HTML в браузере. Вот соответствующий HTML-код для ссылок на мероприятия со страницы результатов поиска:
Проверил содержимое ответа на вызов Request.get() с помощью Soup.prettify(). В HTML-коде отсутствуют ссылки на события, видимые в браузере, что позволяет предположить, что контент может загружаться динамически через JavaScript.
Попытка парсинга данные с помощью BeautifulSoup, но последовательно получаем:
Found 0 events on the page.
Scraped 0 events.
No contacts were scraped.
В чем мне нужна помощь:
Как мне справиться с этим контентом, загруженным JavaScript? Есть ли способ очистить его напрямую или мне нужно использовать такой инструмент, как Selenium?
Если требуется Selenium, как мне правильно интегрировать его с BeautifulSoup для анализа визуализированного HTML?
Я пытаюсь получить ссылки на мероприятия и контактную информацию с веб-сайта RaceRoster (https://raceroster.com/search?q=5k&t=upcoming), используя Python, запросы, Pandas и BeautifulSoup. Цель состоит в том, чтобы извлечь название события, URL-адрес события, имя контактного лица и адрес электронной почты для каждого события и сохранить данные в файл Excel, чтобы мы могли обращаться к этим событиям в целях развития бизнеса. Однако скрипт постоянно сообщает, что на странице результатов поиска не обнаружено ссылок на события, несмотря на то, что ссылки видны при проверке HTML в браузере. Вот соответствующий HTML-код для ссылок на мероприятия со страницы результатов поиска: [code][url=https://raceroster.com/events/2025/98542/13th-annual-delaware-tech-chocolate-run-5k] 13th Annual Delaware Tech Chocolate Run 5k [/url] [/code] Предпринятые шаги: [list] [*]Проверен правильный селектор для ссылок на события:
[*]Проверил содержимое ответа на вызов Request.get() с помощью Soup.prettify(). В HTML-коде отсутствуют ссылки на события, видимые в браузере, что позволяет предположить, что контент может загружаться динамически через JavaScript.
[*]Попытка парсинга данные с помощью BeautifulSoup, но последовательно получаем:
[/list] [code]Found 0 events on the page. Scraped 0 events. No contacts were scraped. [/code] В чем мне нужна помощь: [list] [*]Как мне справиться с этим контентом, загруженным JavaScript? Есть ли способ очистить его напрямую или мне нужно использовать такой инструмент, как Selenium? [*]Если требуется Selenium, как мне правильно интегрировать его с BeautifulSoup для анализа визуализированного HTML? [/list] Текущий сценарий: [code]import requests from bs4 import BeautifulSoup import pandas as pd
# Extract contact name and email contact_name = event_soup.find("dd", class_="event-details__contact-list-definition") email = event_soup.find("a", href=lambda href: href and "mailto:" in href)
contact_name_text = contact_name.text.strip() if contact_name else "N/A" email_address = email['href'].split("mailto:")[1].split("?")[0] if email else "N/A"
if contact_name or email: print(f"Found contact: {contact_name_text}, email: {email_address}") event_contacts.append({ "Event Name": event_name, "Event URL": event_url, "Event Contact": contact_name_text, "Email": email_address }) else: print(f"No contact information found for {event_url}") except Exception as e: print(f"Error scraping event {event_url}: {e}")
def save_to_spreadsheet(data, output_file): if not data: print("No data to save.") return df = pd.DataFrame(data) df.to_excel(output_file, index=False) print(f"Data saved to {output_file}")
contact_data = scrape_event_contacts(base_url, search_url) if contact_data: save_to_spreadsheet(contact_data, output_file) else: print("No contacts were scraped.") [/code] Ожидаемый результат: [list] [*]Извлечение всех ссылок на события со страницы результатов поиска. [*]Перейдите на страницу сведений о каждом событии. [*]Удалите имя контакта () и адрес электронной почты () со страницы сведений. [*]Сохраните результаты. в файл Excel. [/list]