JavaRush /Курси /Python SELF UA /Робота з BeautifulSoup та витяг інформації

Робота з BeautifulSoup та витяг інформації

Python SELF UA
Рівень 31 , Лекція 1
Відкрита

Якщо ви думаєте, що веб-сторінки — це просто красиві картинки і текст, то у мене для вас новина: вони як цибулини — багатошарові і можуть змусити вас плакати (від радості, звісно!), коли ви дізнаєтеся, скільки даних можна з них витягти. Сьогодні ми покопаємося в HTML-сторінках за допомогою бібліотеки BeautifulSoup. Захопіть свою віртуальну лопату — час копати!

1. Аналіз HTML-документів

Прості сторінки

Давайте розберемо кілька простих HTML-документів, щоб зрозуміти, з чого вони складаються та які елементи можуть бути цікавими для витягу даних.

Приклад сторінки новини:

HTML

<html>
  <head>
    <title>Новини</title>
  </head>
  <body>
    <h1>Головна новина дня</h1>
    <p>Сьогодні сталося щось важливе!</p>
  </body>
</html>

У цьому прикладі h1 містить заголовок статті, а p — основний текст.

Вплив HTML-структури на скрейпінг

Перш ніж використовувати BeautifulSoup, важливо зрозуміти, як структурований HTML-документ, який ви хочете розпарсити. Це дозволяє визначити, які частини сторінки містять потрібні дані. Наприклад, якщо ви шукаєте заголовок сторінки, зверніть увагу на <h1>, а для витягу списку використовуйте <ul> і <li>.

Підготовка до скрейпінгу

Перед початком витягу даних важливо виділити ключові теги та атрибути. Наприклад, якщо веб-розробники самі розмітили дані на своїй сторінці, наприклад використавши атрибут class="headline" для заголовка, це вам дуже допоможе. Використовуйте засоби розробника в браузері, щоб дослідити HTML-структуру. Для цього натисніть правою кнопкою миші на елементі та виберіть "Inspect" (у Google Chrome).

2. Установка і налаштування бібліотек

Установка BeautifulSoup і requests

Для роботи з HTML ми будемо використовувати бібліотеку BeautifulSoup. Також, щоб завантажувати HTML-сторінки, нам знадобиться requests. Установка проста і вимагає лише кілька команд у вашій консолі:

Bash

pip install beautifulsoup4 requests

Спільна робота запитів і BeautifulSoup

Requests дозволить нам надсилати запити до HTML-сторінок, а BeautifulSoup допоможе з їхнім розбором. Подивімося, як це виглядає в дії:

Python

import requests
from bs4 import BeautifulSoup

# Завантажуємо сторінку
url = 'https://example.com'
response = requests.get(url)

# Парсимо сторінку з BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')

# Витягуємо заголовок сторінки
title = soup.title.text
print('Заголовок:', title)

3. Навігація і витяг даних за тегами

Методи навігації

Тепер, коли у нас є HTML-документ, ми можемо використовувати BeautifulSoup для навігації по ньому. Шикарний метод .select() дозволяє витягувати дані, використовуючи CSS-селектори.

Витяг даних за тегами

BeautifulSoup надає методи, які дозволяють знаходити елементи за їхніми тегами, такими як find і find_all. Вони допоможуть вам знайти бажані шматочки даних:

Python

# Знаходимо перший абзац
paragraph = soup.find('p').text
print('Перший абзац:', paragraph)

# Знаходимо всі елементи списку
list_items = soup.find_all('li')
for item in list_items:
 print('Елемент списку:', item.text)

Використання атрибутів для фільтрації

Іноді вам потрібно буде витягати елементи, які відповідають певним умовам, наприклад, мають певний class. BeautifulSoup дозволяє легко це зробити:

Python

# Витяг елемента з певним класом
headline = soup.find('h1', class_='main-headline').text
print('Заголовок:', headline)

4. Застосування CSS-селекторів

Що таке CSS-селектори?

CSS-селектори — потужний інструмент з точки зору Python-програміста, який дозволяє витягувати дані за конкретними критеріями. Вони можуть бути використані для пошуку елементів, які мають спільні стилі, що робить скрейпінг більш гнучким і точним.

Використання селекторів у BeautifulSoup

BeautifulSoup дозволяє використовувати CSS-селектори через метод select. Наприклад:

Python

# Вибір всіх посилань
links = soup.select('a')
for link in links:
 print('Посилання:', link['href'])

Ви навіть можете комбінувати селектори для більш точного вибору. Наприклад, soup.select('div.article h2') вибере всі h2 всередині div з класом article.

Приклади пошуку з CSS-селекторами

Застосуймо наші знання на практиці. Виберіть всі абзаци з класом highlight і виведіть їх текст:

Python

# Витяг всіх абзаців з класом 'highlight'
highlighted_paragraphs = soup.select('p.highlight')
for para in highlighted_paragraphs:
 print('Виділений абзац:', para.text)

На цьому поки все, не забудьте попрактикуватися у своїх навичках скрейпінгу до наступної зустрічі. Удачі у захоплюючому світі парсингу!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ