Хотите погрузиться в мир скраппинг но при этом не увязнуть в сложных кодах?
С Python и библиотека BeautifulSoup, вы можете легко извлекать и организовывать данные веб-сайт всего в нескольких строчках.

Необходимые условия для скраппинга на Python с помощью BeautifulSoup
✅ Прежде чем приступить к работе, важно иметь несколько основы программирования. Это позволит вам лучше понять, как работает код. Необязательно быть экспертом, но умение читать и выполнять скрипты Python будет очень полезно.
Далее, вот что вам нужно сделать в первую очередь сделать скраппинг на Python с BeautifulSoup :
- ✔ Установить Python а также среду разработки.
- ✔ Установить
pip, инструмент, который позволяет легко добавлять библиотеки Python. - ✔ Установить BeautifulSoup с помощью команды :
pip install beautifulsoup4
- ✔ Установить Запросы для получения веб-страниц с помощью команды :
pip install requests
Как сделать веб-скреппинг с помощью Python и BeautifulSoup?
Следуйте нашему руководству, чтобы выполнить простой проект по веб-скреппингу.

Проект : получить заголовок страницы и все ссылки, которые она содержит.
Шаг 1: Получение содержимого страницы с помощью запросов
Для проведения HTTP GET запрос на URL, используйте Запросы.
📌 Когда вы отправляете HTTP-запрос с помощью Requests, сервер всегда возвращает код состояния. Эти коды показывают, был ли запрос успешным или нет.
200 успех.
301 / 302 перенаправление.
404 Страница не найдена.
500 внутренняя ошибка сервера.
.status_code. Вот пример кода, который отправляет запрос на bonjour.comкоторый проверяет код состояния и отображает выдержку из HTML-содержимого, если все в порядке:
запросы на импорт
# Целевой URL
url = "https://bonjour.com"
# Отправляем GET-запрос
response = requests.get(url)
# Проверка кода состояния
if response.status_code == 200:
print("Success: the page has been retrieved!")
html = response.text # HTML-содержимое страницы
print("Извлечение HTML-содержимого:")
print(html[:500]) # отображает только первые 500 символов
else:
print(f "Ошибка: код состояния {код_ответа.статус_код}")
Шаг 2: Проанализируйте HTML-код с помощью BeautifulSoup
ответ.текст), вы получите символьную строку, содержащую весь HTML-код страницы. Чтобы легко манипулировать этим HTML, мы используем BeautifulSoup создать объект BeautifulSoup."html.parser). Это позволяет BeautifulSoup правильно интерпретировать HTML и избежать предупреждений.из bs4 import BeautifulSoup
импортировать запросы
url = "https://bonjour.com"
response = requests.get(url)
html = response.text
# Рекомендуется указывать парсер
soup = BeautifulSoup(html, "html.parser")
Шаг 3: Поиск и извлечение элементов
- Используйте
найти()а такжеfind_all()
# Получить название <h1>
h1 = soup.find("h1")
print(h1.get_text())
# Получить все ссылки <a>
liens = soup.find_all("a")
for lien in liens:
print(lien.get_text(), lien.get("href"))
- Адресация элементов по атрибутам
Вы можете уточнить поиск по таким атрибутам, как сорт, идентификатор или любой другой атрибут HTML.
⚠️ Примечание На языке Python мы пишем класс_ вместо сорт чтобы избежать конфликта с зарезервированным словом сорт.
# Получение div с определенным идентификатором
container = soup.find("div", id="main")
# Получение всех ссылок с определенным классом
nav_links = soup.find_all("a", class_="nav-link")
- Используйте селекторы CSS с
select()
Для более точного поиска используйте select() с помощью селекторов CSS.
# Все ссылки в заголовках статей
article_links = soup.select("article h2 a")
# Все <a> чей атрибут href начинается с "http".
links_http = soup.select('a[href^="http"]')
Les Селекторы CSS очень эффективны, если вы хотите точно нацелиться на определенные части страницы, не просматривая весь HTML вручную.
Как извлечь данные из HTML-таблицы с помощью BeautifulSoup?

До сих пор мы рассмотрели, как извлекать заголовки, ссылки или текст из веб-страницы.
⚠ Но часто реальные случаи использования более сложны: извлечение структурированных данных такие как таблицы или списки, управление пагинацией или устранение частых ошибок, связанных со скрапингом. Именно это мы и рассмотрим вместе.
Извлечение таблиц и списков
Веб-сайты часто представляют свои данные в Таблицы HTML (<table>, <tr>, <th>, <td>) или списки (
- /
- ). Чтобы превратить эти структуры в пригодные для использования данные, необходимо научиться просматривать их строка за строкой или элемент за элементом.
Когда бы вы ни захотели извлечение таблицы HTMLПринцип прост:
- ✅ Восстановление заголовков (
<th>) для определения заголовков столбцов. - ✅ Просмотрите каждую строку (
<tr>) и поиск ячеек (<td>), которые содержат реальные данные. - ✅ Храните информацию в списке или словаре.
Для Список HTML (
- или
- ) :
- ✅ Найти все теги
снайти_все. - ✅ Получите их содержимое (текст или ссылку) и добавьте его в список Python.
В итоге :
Метки
<table>,<tr>,<th>,<td>используются для восстановления таблицы.
Метки/,используются для преобразования HTML-списка в список Python.Вот пример с таблицей:
html = """ <table> <tr> <th>Фамилия</th> <th>Возраст</th> <th>Городок</th> </tr> <tr> <td>Алиса</td> <td>25</td> <td>Париж</td> </tr> <tr> <td>Боб</td> <td>30</td> <td>Лион</td> </tr> </table> """ # Создайте объект BeautifulSoup soup = BeautifulSoup(html, "html.parser") # Извлеките заголовки из массива headers = [th.get_text(strip=True) for th in soup.find_all("th")] print("Заголовки:", headers) # Извлеките строки данных (пропустите 1-ю строку, так как это заголовки) rows = [] for tr in soup.find_all("tr")[1:]: cells = [td.get_text(strip=True) for td in tr.find_all("td")] if cells: rows.append(cells) print("Строки :", rows)Вот,
find_all("th")извлекает заголовки иfind_all("td")извлекает ячейки в каждом ряду. Мы перебираем в цикле<tr>чтобы перестроить таблицу строка за строкой.Вот пример, основанный на списке:
из bs4 import BeautifulSoup html_list = """- Яблоко
- Банана
- Апельсин
Здесь каждый
преобразуется непосредственно в элемент списка Python, что дает результат["Яблоко", "Банан", "Апельсин"]..Управление пагинацией и ссылками
Часто данные не умещаются на одной странице. Они распределяются по нескольким страницам с помощью «следующая страница» или нумерованная пагинация (?page=1, ?page=2, ...).
📌 В обоих случаях вы должны скручивание (просмотр в цикле), чтобы получить все страницы и объединить данные.
Пример с параметром страницы :
время импорта импортировать запросы из bs4 import BeautifulSoup # Пример URL с пагинацией BASE_URL = "https://bonjour.com/articles?page={}" HEADERS = {"User-Agent": "Mozilla/5.0"} all_articles = [] # Предположим, что есть 5 страниц для просмотра for page in range(1, 6): url = BASE_URL.format(page) r = requests.get(url, headers=HEADERS, timeout=20) if r.status_code == 200: soup = BeautifulSoup(r.text, "html.parser") # Извлечение заголовков статей articles = [h2.get_text(strip=True) for h2 in soup.find_all("h2", class_="title")] all_articles.extend(articles) else: print(f "Ошибка на странице {page} (код : {r.status_code})") time.sleep(1.0) # вежливость print("Получено статей:", all_articles)Краткое объяснение:
- Подготовьте URL-адрес с местом {} для вставки номера страницы.
BASE_URL = "https://bonjour.com/articles?page={}- Некоторые сайты блокируют запросы без «идентификатора браузера». Добавление User-Agent позволяет избежать ошибочного распознавания как бота.
headers = {"User-Agent": "Mozilla/5.0"} requests.get(url, headers=headers)- Петляйте со страницы 1 по 5.
for page in range(1, 6):- Извлеките HTML из страницы.
requests.get(url)- Ограничьте время ожидания, если сайт не отвечает.
requests.get(url, timeout=20)- Парсер страницы.
BeautifulSoup(response.text, "html.parser")- Собрать все заголовки статей.
find_all("h2", class_="title")- Добавьте найденные элементы в глобальный список.
all_articles.extend(articles)- Введите паузу между каждым запросом, чтобы не перегружать сервер и не быть забаненным.
time.sleep(1.0)- После петли,
all_articlesсодержит все 5 названий страниц.
Распространенные ошибки и проблемы
❗ Скрапинг — это не всегда просто нажатие кнопки и все готово. Вы можете столкнуться с такими частыми препятствиями, как:
- Ошибки HTTP
404 страница не найдена
403 нет доступа
500 ошибка на стороне сервераПример :
response = requests.get(url) если response.status_code == 200: # Страница OK print("Страница получена успешно") elif response.status_code == 404: print("Ошибка: страница не найдена") else: print("Код возвращен:", response.status_code)- Сайты, блокирующие скраппинг
Некоторые обнаруживают автоматические запросы и блокируют доступ.
- Динамические страницы (JavaScript)
BeautifulSoup читает только статический HTML. Если страница загружает свой содержание с помощью JavaScriptвы ничего не увидите.
✅ В этом случае используйте такие инструменты, как Селен Где Драматург.
Тем не менее, если вы хотите эффективно скрести, не подвергаясь блокировке и не нанося вреда сайту, вот лучшие методы:
- ✔ Уважайте файл robots.txt веб-сайта.
- ✔ Установите сроки между запросами, чтобы не перегружать сервер (с помощью time.sleep()).
- ✔ Использование прокси и поворачивайте их.
- ✔ Регулярно меняйте Агент пользователя.
Как с помощью Selenium и BeautifulSoup отсканировать веб-страницы?

Веб-скрепинг с помощью Selenium и BeautifulSoup в Chrome. Кристина для Alucare.fr ⚠ Напоминание : BeautifulSoup — отличный HTML-анализатор, но он не может выполнять JavaScript на веб-странице. Именно здесь Selenium становится вашим союзником!
По сути, селен управлять настоящим браузеромОн выполняет JavaScript и отображает страницу так, как если бы ее просматривал человек. BeautifulSoup разберет HTML-код, когда страница будет полностью отображена. Таким образом, вы можете извлечь то, что вам нужно.
Шаг 1: Установите Selenium и BeautifulSoup
Здесь, вместо библиотеки Request, мы будем использовать Селен. Чтобы установить его, необходимо пройти через pip.
pip install selenium beautifulsoup4Далее вам нужно загрузить и установить WebDriver которая соответствует версии вашего браузера (например, ChromeDrive для Google Chrome).
✅ Вы можете либо поместить его в ту же папку, что и ваш скрипт Python, либодобавить в переменную окружения PATH вашей системы.
Шаг 2: Настройка Selenium
Прежде всего, вам необходимо импортировать webdriver из Selenium для управления браузером.
from selenium import webdriver from selenium.webdriver.common.by import ByЗатем запускается браузер. Он откроет веб-страницу и выполнит JavaScript (Пример: Chrome).
driver = webdriver.Chrome()Вы указываете браузеру, какую страницу посетить.
driver.get("https://www.exemple.com")Если страница долго загружает некоторые элементы, вы можете попросить Selenium немного подождать.
driver.implicitly_wait(10)Шаг 3: Получение содержимого страницы
После загрузки страницы вы можете получить файл Полная версия (исходный код HTML после выполнения JS).
html_content = driver.page_sourceШаг 4: Анализ HTML с помощью BeautifulSoup
Теперь передайте этот исходный код в BeautifulSoup, чтобы его можно было использовать:
from bs4 import BeautifulSoup # Создание объекта BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') # Пример: получение всех заголовков на странице titles = soup.find_all('h2') for title in titles: print(title.get_text())👉 BeautifulSoup предлагает такие мощные методы, как find(), find_all(), а также CSS-селекторы для цель а также извлекать элементы HTML код.
Шаг 5: Закрытие браузера
Очень важно: всегда закрывайте браузер после выполнения, чтобы освободить ресурсы!
driver.quit()✅ Вот и все! Теперь вы можете использовать возможности Selenium для имитация человеческой навигации (клики, прокрутка и т. д.) с эффективностью BeautifulSoup для анализа HTML-кода.
Часто задаваемые вопросы
Какой инструмент лучше всего подходит для веб-скреппинга на Python?
На самом деле не существует лучшего универсального инструмента, а есть решения, подходящие для вашего проекта.
🔥 BeautifulSoup HTML-парсер: простой и эффективный инструмент для анализа HTML и быстрого извлечения содержимого. Идеально подходит, если вы только начинаете или у вас небольшие проекты.
🔥 Scrapy : это полнофункциональный фреймворк, разработанный для управления большими объемами данных с помощью расширенных функций.
🔥 Драматург : идеально подходит для сложных сайтов, созданных с помощью JavaScript, поскольку имитирует настоящий браузер и позволяет взаимодействовать со страницей как человек.
Как использовать BeautifulSoup для извлечения содержимого из тегов <div> ?
С помощью BeautifulSoup вы можете нацелить определенный маяк, используя CSS-селектор. Чтобы извлечь содержимое из <div>Вот шаги:
- Получите страницу с помощью Requests, а затем проанализируйте ее с помощью BeautifulSoup.
из bs4 import BeautifulSoup импортировать запросы url = "URL_OF YOUR_SITE" # Замените на реальный URL response = requests.get(url) html_content = response.text soup = BeautifulSoup(html_content, "html.parser")- Используйте
select()передав ему свой CSS-селектор, который будет нацелен на тег<div>
Чтобы получить первый элемент, используйте
суп.select_oneЧтобы получить все элементы, используйте
суп.выбратьПример HTML:
<div class="article"> <h2>Название статьи</h2> <p>Вот что говорится в этом параграфе.</p> </div>Пример с CSS :
# Получите первый div с классом "article" div_article = soup.select_one("div.article") # Отобразите его текстовое содержимое if div_article: print(div_article.get_text(strip=True))Здесь селектор CSS имеет вид
div.article.- Извлечение элементов внутри
<div>
# Получение заголовка внутри div title = soup.select_one("div.article h2").get_text() # Извлечение абзаца из div paragraph = soup.select_one("div.item p").get_text() print("Заголовок:", title) print("Параграф:", paragraph)Как можно использовать Requests и BeautifulSoup вместе?
Эти две библиотеки дополняют друг друга.
- Requests извлекает содержимое веб-страницы с помощью HTTP-запроса.
Он отправляет HTTP-запрос на целевой сайт и загружает необработанный HTML-код страницы.
запросы на импорт url = "https://sitecible.com" response = requests.get(url) # HTTP-запрос print(response.text) # отображает необработанный HTMLНа этом этапе все, что у вас есть, - это огромный текст, полный тегов (<html>,<div><p>и т.д.).
- BeautifulSoup анализирует этот HTML-контент, чтобы извлечь то, что вас интересует.
Она берет необработанный HTML-код и преобразует его в организованную структуру. Благодаря этому вы можете легко перемещаться по HTML-коду: находить, извлекать и извлекать данные.
из bs4 import BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") # разбирает HTML title = soup.find("h1").get_text() # извлекает содержимое файла <h1> print(title)Почему мой код веб-скреппинга не работает на некоторых сайтах?
Ваш скрипт может ничего не получить, потому что некоторые сайты не предоставляют все содержимое непосредственно в HTML.
Эти сайты используют JavaScript для динамической загрузки данных. Однако BeautifulSoup не позволяетанализировать данные, отображаемые с помощью JavaScript.
В этом случае вам следует обратиться к таким инструментам, как Драматург Где Селен.
Какую роль играет BeautifulSoup в веб-скреппинге?
BeautifulSoup выполняет рольПарсер HTML.
Он берет исходный код страницы в виде простого текста и преобразует его в структурированный объект, который можно легко просматривать.
Без этой библиотеки вы увидите огромный блок нечитаемого текста. Проще говоря, BeautifulSoup - это переводчик между Обычный HTML и ваш Код Python.
Веб-скрепинг: BeautifulSoup против Scrapy?
BeautifulSoup а также Scrapy очень разные, хотя оба используются для веб-скрапинга.
BeautifulSoup Scrapy Простая библиотека, используемая исключительно для разбора HTML и извлечения данных. Полноценный фреймворк, который управляет всем процессом скрапбукинга
(запросы, отслеживание ссылок, пагинация, экспорт данных, обработка ошибок).Вкратце, BeautifulSoup упрощаетИзвлечение данных из HTML в Python. Эта библиотека идеально подходит для новичков, так как позволяет быстро и легко выполнять скрапбукинг.
В противном случае, если вы не хотите отсутствие кодировки, полный инструментарий Яркие данные также является отличным решением для веб-скреппинга.
👉 А теперь расскажите нам в комментариях, что вам удалось наскрести!
- ✅ Найти все теги
- с
- ✅ Восстановление заголовков (
- ,





