1. Вспоминаем CSS-селекторы
Добро пожаловать в наш мир, где HTML-страницы раскрывают свои секреты не по щелчку пальца, а по меткому CSS-селектору. Если вы думаете, что CSS-селекторы нужны только для стилизации страниц (ну, чтобы ваш сайт выглядел не как исписанная школьная тетрадь), то вам пора раскрыть свой третий глаз скрейпера. Сегодня мы рассмотрим, как CSS-селекторы могут стать вашим любимым инструментом для поиска и извлечения данных.
CSS-селекторы, как уменьшительно-ласкательное выражение, позволяют нам обращаться к элементам HTML. Они помогают определить, какие элементы на странице вы хотите обработать. Если HTML-страница — это лабиринт, то CSS-селекторы — это красная нить, позволяющая найти выход.
Примеры CSS-селекторов
- Тег:
p— выбирает все<p>элементы (параграфы). - Класс:
.classname— выбирает все элементы с заданным классом. - ID:
#idname— выбирает элемент с определенным ID. - Комбинации:
div > p— выбирает все<p>, которые являются непосредственными дочерними элементами<div>.
2. Использование селекторов в BeautifulSoup
Прощай, скучная жизнь без CSS-селекторов в BeautifulSoup! Пора освежить наш подход. Представим ситуацию: мы натолкнулись на сайт и просто обязаны вытащить оттуда все цитаты великих мудрецов, чтобы пустить пыль в глаза на собеседовании. Для этого мы используем метод select(), который работает именно с CSS-селекторами.
Метод select() и select_one()
Метод select() вернет вам список всех элементов, которые соответствуют вашему селектору. А select_one() найдет для вас самый первый элемент, который соответствует селектору, — как поисковик, который возвращает именно то, что нужно, а не километровый список бессмысленных ресурсов.
Допустим у вас есть HTML-страница, содержащая цитаты:
<div class="quote">
<h2 class="author">Шелдон Купер</h2>
<p class="text">Я не сумасшедший, моя мама меня проверяла.</p>
<a href="https://example.com" class="link">Читать далее</a>
</div>
<div class="quote">
<h2 class="author">Пенни</h2>
<p class="text">О, сладкая булочка, как ты добра.</p>
<a href="https://example.com" class="link">Читать далее</a>
</div>
<div class="quote">
<h2 class="author">Говард Воловиц</h2>
<p class="text">Я не просто инвестор, я космический инженер, который иногда инвестирует!</p>
<a href="https://example.com" class="link">Читать далее</a>
</div>
Вот как мы можем их получить:
from bs4 import BeautifulSoup
import requests
# Получаем HTML-код страницы
response = requests.get('http://quotes.toscrape.com/')
soup = BeautifulSoup(response.text, 'html.parser')
# Находим все цитаты с помощью CSS-селекторов
quotes = soup.select('.quote')
for quote in quotes:
text = quote.select_one('.text').get_text()
author = quote.select_one('.author').get_text()
print(f'Цитата: {text}\\nАвтор: {author}\\n')
Не правда ли, удобство на грани магии? Класс .quote помогает нам забрать все элементы, обозначенные как цитаты, а .text и .author — это дочерние элементы, из которых мы извлекаем текст цитаты и автора.
3. Примеры поиска с CSS-селекторами
Попрактикуемся на примерах, чтобы ваш умный мозг знал, что делать, когда увидит div с десятью классами. Селекторы могут использоваться для более целенаправленного поиска данных на страницах. Вы можете комбинировать их, чтобы получить именно то, что вам нужно.
Селектор по классу и тегу
# Поиск всех ссылок в блоке меню
menu_links = soup.select('nav.menu a')
for link in menu_links:
print(link['href'])
Селектор по ID
# Извлечение основного заголовка страницы
main_heading = soup.select_one('#main-heading')
print(main_heading.text)
Комбинирование селекторов
# Поиск всех предложений в выделенной секции
highlighted_sentences = soup.select('.highlighted p')
for sentence in highlighted_sentences:
print(sentence.text)
4. Ошибки и способы их избежать
Ваша работа как скрейпера не всегда будет простой, как чашка кофе. Бывают случаи, когда CSS-селекторы могут не сработать, если:
- Страница имеет изменяющийся динамический контент, и нужные элементы загружаются через JavaScript.
- Вы обращаетесь к селектору, которого не существует (например, допущена ошибка в написании класса или ID).
- Структура HTML меняется, что ведет к воспроизведению сцены из ужастика, в которой вы ищете нужные элементы.
Чтобы избежать подобных ошибок, убедитесь, что вы работаете с актуальной и статичной версией HTML-документа, а также следите за точностью написания селекторов.
Практическое применение
Теперь у вас появилась возможность использовать CSS-селекторы в реальных проектах по извлечению данных. Этот навык пригодится при создании инструментов для анализа и мониторинга цен, получения новостей и даже отслеживания изменений на сайтах. Красота подхода в том, что даже если сайт изменит внешний вид благодаря CSS, ваш код останется функциональным, так как он зависит от HTML-структуры, а не от стилизации.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Добро пожаловать в наш мир, где HTML-страницы раскрывают свои секреты не по щелчку пальца,
(ну, чтобы ваш сайт выглядел не как исписанная школьная тетрадь), то вам пора раскрыть свой третий глаз скрейпера.
CSS-селекторы, как уменьшительно-ласкательное выражение, позволяют нам обращаться к элементам HTML.
Если HTML-страница — это лабиринт, то CSS-селекторы — это красная нить, позволяющая найти выход.
Прощай, скучная жизнь без CSS-селекторов в BeautifulSoup!
Представим ситуацию: мы натолкнулись на сайт и просто обязаны вытащить оттуда все цитаты великих мудрецов, чтобы пустить пыль в глаза на собеседовании.
как поисковик, который возвращает именно то, что нужно, а не километровый список бессмысленных ресурсов.
Не правда ли, удобство на грани магии?
чтобы ваш умный мозг знал, что делать, когда увидит div с десятью классами.
<Ваша работа как скрейпера не всегда будет простой, как чашка кофе./em>
Удаление всего этого мусора, абсолютно никак не уменьшит объем знаний из лекции, но значительно облегчит ее читаемость и восприятие.