1. Вступ до методів витягування тексту
Сьогодні ми навчимося витягати дорогоцінні текстові дані й атрибути з HTML-елементів. Забудьте про мачете, тому що з BeautifulSoup робота з кодом схожа на прогулянку осіннім садом, де яблука просто просяться, щоб їх зірвали. Готові збирати плоди вашого навчання? Тоді почнемо!
Методи витягування тексту з HTML-елементів є найпершими в нашому списку. Перед тим як почати витягувати текст, давайте завантажимо сторінку.
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() дозволяють отримати текстове наповнення елемента (і всіх його вкладених елементів).
# Витягуємо текст з першого знайденого заголовка h1
h1_tag = soup.find('h1')
print(h1_tag.text) # або h1_tag.get_text()
Спробуйте самі: знайдіть інші елементи, використовуючи методи пошуку, які ми вивчали на попередніх лекціях, і витягніть з них текст. Ви здивуєтеся, скільки інформації можна отримати!
2. Витяг значень атрибутів
Тексти текстами, але іноді важливі дані ховаються в атрибутах, як паспорти в кишенях. Уявіть собі, що потрібно дізнатися адресу посилання або отримати URL зображення (і не питайте мене, навіщо це може знадобитися; а раптом захочете колекціонувати зображення котиків).
Витяг значень атрибутів
Припустимо, у нас є елемент посилання <a href="https://example.com">Example</a>. Як отримати значення href? Дуже просто.
# Витягуємо посилання
a_tag = soup.find('a')
link = a_tag['href']
print("Посилання:", link)
Цей код витягнув значення атрибута href. Інші корисні атрибути можна витягнути аналогічним чином.
Пробуємо витягнути зображення
Витяг URL зображення може бути настільки ж простим. Розглянемо випадок з <img src="image.jpg" alt="Котик">.
# Витягуємо URL зображення
img_tag = soup.find('img')
image_url = img_tag['src']
print("URL зображення:", image_url)
Краса роботи з BeautifulSoup в тому, що він дозволяє легко знаходити й витягувати дані, не змушуючи нас замислюватися про те, як саме працює HTML-структура.
3. Приклади витягування тексту і атрибутів
Час перейти до прикладів. Давайте розглянемо трохи складніше завдання: витягнемо всі посилання на сторінці, разом з текстом всередині тегів <a>.
Приклад: витяг всіх посилань з текстом
# Знаходимо всі теги 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-структура може відрізнятися від очікуваної, або елемент може не мати потрібного атрибута. Потурбуйтесь про те, щоб ваш код не "зламався" на таких моментах.
# Приклад обробки помилок при витягуванні атрибута
try:
link = a_tag['href']
except KeyError:
link = None
print("Атрибут href не знайдений!")
Це дозволить зробити скрипт більш стійким, і він не зупиниться через одну неочевидну помилку.
5. Реальне застосування
У 2019 році український підприємець поділився історією про те, як його компанія, що спеціалізується на парсингу даних, досягла обороту в 20 мільйонів гривень на рік. Він зазначив, що автоматизований збір інформації не обмежує конкуренцію, а, навпаки, допомагає бізнесам адаптуватись до ринку.
Наприклад, один з клієнтів замовив парсер для щоденного збору залишків товарів з сайту постачальника, що дозволило оперативно оновлювати асортимент і ціни в власному інтернет-магазині. Підприємець також підкреслив, що, незважаючи на спроби деяких сайтів ускладнити парсинг, сучасні технології дозволяють ефективно обходити такі перешкоди, забезпечуючи бізнесам доступ до необхідних даних для прийняття стратегічних рішень.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ