JavaRush /Курси /Python SELF UA /Витяг текстів і атрибутів з HTML-елементів за допомогою м...

Витяг текстів і атрибутів з HTML-елементів за допомогою методів BeautifulSoup

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

1. Вступ до методів витягування тексту

Сьогодні ми навчимося витягати дорогоцінні текстові дані й атрибути з HTML-елементів. Забудьте про мачете, тому що з BeautifulSoup робота з кодом схожа на прогулянку осіннім садом, де яблука просто просяться, щоб їх зірвали. Готові збирати плоди вашого навчання? Тоді почнемо!

Методи витягування тексту з HTML-елементів є найпершими в нашому списку. Перед тим як почати витягувати текст, давайте завантажимо сторінку.

Python

import requests
from bs4 import BeautifulSoup

# Завантажуємо HTML-код сторінки
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

Тепер у нас є об'єкт soup, який містить деревоподібну структуру нашого HTML-документу. Давайте витягнемо текст з якогось тегового елемента, наприклад, заголовка.

Методи .text і get_text()

Властивість .text і його аналог - метод get_text() дозволяють отримати текстове наповнення елемента (і всіх його вкладених елементів).

Python

# Витягуємо текст з першого знайденого заголовка h1
h1_tag = soup.find('h1')
print(h1_tag.text) # або h1_tag.get_text()

Спробуйте самі: знайдіть інші елементи, використовуючи методи пошуку, які ми вивчали на попередніх лекціях, і витягніть з них текст. Ви здивуєтеся, скільки інформації можна отримати!

2. Витяг значень атрибутів

Тексти текстами, але іноді важливі дані ховаються в атрибутах, як паспорти в кишенях. Уявіть собі, що потрібно дізнатися адресу посилання або отримати URL зображення (і не питайте мене, навіщо це може знадобитися; а раптом захочете колекціонувати зображення котиків).

Витяг значень атрибутів

Припустимо, у нас є елемент посилання <a href="https://example.com">Example</a>. Як отримати значення href? Дуже просто.

Python

# Витягуємо посилання
a_tag = soup.find('a')
link = a_tag['href']
print("Посилання:", link)

Цей код витягнув значення атрибута href. Інші корисні атрибути можна витягнути аналогічним чином.

Пробуємо витягнути зображення

Витяг URL зображення може бути настільки ж простим. Розглянемо випадок з <img src="image.jpg" alt="Котик">.

Python

# Витягуємо URL зображення
img_tag = soup.find('img')
image_url = img_tag['src']
print("URL зображення:", image_url)

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

3. Приклади витягування тексту і атрибутів

Час перейти до прикладів. Давайте розглянемо трохи складніше завдання: витягнемо всі посилання на сторінці, разом з текстом всередині тегів <a>.

Приклад: витяг всіх посилань з текстом

Python

# Знаходимо всі теги a
a_tags = soup.find_all('a')

# Виводимо посилання і текст
for a_tag in a_tags:
 link = a_tag['href']
 text = a_tag.get_text()
 print(f"Текст: {text}, Посилання: {link}")

Як бачите, метод find_all зручно знаходить всі елементи, які відповідають критеріям пошуку, а for-цикл дозволяє обійти кожен з них.

4. Обробка помилок

Не забувайте обробляти помилки. Іноді HTML-структура може відрізнятися від очікуваної, або елемент може не мати потрібного атрибута. Потурбуйтесь про те, щоб ваш код не "зламався" на таких моментах.

Python

# Приклад обробки помилок при витягуванні атрибута
try:
 link = a_tag['href']
except KeyError:
 link = None
 print("Атрибут href не знайдений!")

Це дозволить зробити скрипт більш стійким, і він не зупиниться через одну неочевидну помилку.

5. Реальне застосування

У 2019 році український підприємець поділився історією про те, як його компанія, що спеціалізується на парсингу даних, досягла обороту в 20 мільйонів гривень на рік. Він зазначив, що автоматизований збір інформації не обмежує конкуренцію, а, навпаки, допомагає бізнесам адаптуватись до ринку.

Наприклад, один з клієнтів замовив парсер для щоденного збору залишків товарів з сайту постачальника, що дозволило оперативно оновлювати асортимент і ціни в власному інтернет-магазині. Підприємець також підкреслив, що, незважаючи на спроби деяких сайтів ускладнити парсинг, сучасні технології дозволяють ефективно обходити такі перешкоди, забезпечуючи бізнесам доступ до необхідних даних для прийняття стратегічних рішень.

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