You are on page 1of 7

Лабораторна робота №4 «Використання бібліотеки BeautifulSoup для

парсингу HTML-сторінок та збору даних про статті з новинного сайту»

Хід роботи
4.1. Отримання HTML-коду веб-сторінки з використанням бібліотеки
requests.

Для отримання HTML-коду веб-сторінки з використанням бібліотеки


requests можна використати наступний код:

import requests

url = 'https://www.example.com'
response = requests.get(url)

if response.status_code == 200:
html_code = response.text
print(html_code)
else:
print('Error:', response.status_code)
У цьому коді ми використовуємо функцію requests.get() для відправки
GET-запиту на вказану веб-сторінку за допомогою URL-адреси. Якщо запит
був успішним (статус код 200), ми можемо отримати HTML-код сторінки за
допомогою властивості text об'єкта відповіді (response).
Отриманий HTML-код можна використовувати для подальшої обробки
та аналізу за допомогою бібліотеки BeautifulSoup.

4.2. Аналіз HTML-коду з використанням бібліотеки BeautifulSoup для


знаходження необхідних елементів (наприклад, заголовків статей, посилань на
статті тощо).
Після отримання HTML-коду веб-сторінки з використанням бібліотеки
requests, можна використовувати бібліотеку BeautifulSoup для аналізу коду та
отримання необхідних елементів.
Основні методи BeautifulSoup:
find() - знаходить перший елемент на сторінці, який відповідає заданому
критерію;
find_all() - знаходить всі елементи на сторінці, які відповідають заданому
критерію;
select() - знаходить всі елементи на сторінці, які відповідають заданому
CSS-селектору.
Приклад використання BeautifulSoup для знаходження заголовків статей
та посилань на статті на веб-сторінці новинного сайту:

import requests
from bs4 import BeautifulSoup

url = 'https://example.com/news'
response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')

# знаходимо всі заголовки статей (елементи <h2>)


headlines = soup.find_all('h2')

# знаходимо всі посилання на статті (елементи <a> з атрибутом href,


який містить '/news/')
article_links = soup.select('a[href*="/news/"]')

# виводимо знайдені результати


for headline in headlines:
print(headline.text.strip())

for link in article_links:


print(link['href'])
У даному прикладі ми використали метод find_all() для знаходження
всіх елементів <h2> на сторінці, та метод select() для знаходження всіх
елементів <a> з атрибутом href, який містить рядок '/news/'. Зауважте, що ми
використали CSS-селектор для знаходження елементів у методі select().
Таким чином, з використанням BeautifulSoup можна ефективно
аналізувати HTML-код веб-сторінок та знаходити необхідні елементи.

4.3. Збір даних про статті та їх збереження в структурованому вигляді


(наприклад, у вигляді списку словників).

Після того, як було знайдено необхідні елементи на веб-сторінці, можна


зібрати дані про статті та зберегти їх у структурованому вигляді. Для цього
можна використати словник, де ключі будуть відповідати різним атрибутам
статей (наприклад, заголовок, посилання, дата публікації тощо), а значення -
відповідним значенням цих атрибутів для кожної статті.
Наприклад, якщо ми збираємо дані про заголовки та посилання на статті,
ми можемо зберігати їх у вигляді списку словників, де кожен словник містить
ключі "title" та "link", що відповідають заголовку та посиланню відповідно.
Приклад коду для збору даних про заголовки та посилання на статті та
їх збереження у вигляді списку словників:

import requests
from bs4 import BeautifulSoup

# Отримання HTML-коду веб-сторінки


url = 'https://www.example.com/news'
response = requests.get(url)
html = response.text

# Аналіз HTML-коду з використанням BeautifulSoup


soup = BeautifulSoup(html, 'html.parser')

# Знаходження елементів, що містять заголовки та посилання на статті


articles = soup.find_all('div', class_='article')

# Створення списку словників з даними про статті


articles_list = []
for article in articles:
title = article.find('h2').text
link = article.find('a')['href']
articles_list.append({'title': title, 'link': link})

# Виведення результатів
print(articles_list)
Отриманий результат буде містити список словників, де кожен словник
містить дані про одну статтю у вигляді пари ключ-значення для заголовку та
посилання. Цей список може бути подальше оброблений та використаний для
аналізу даних, наприклад, для знаходження статей за певною темою або для
відображення списку статей на веб-сторінці.

4.4. Аналіз та обробка отриманих даних (наприклад, фільтрація за


певними параметрами).

Після отримання даних та їх збереження у структурованому вигляді


можна провести різноманітний аналіз та обробку за допомогою різних
бібліотек Python.
Наприклад, можна використовувати бібліотеку pandas для створення
DataFrame зі списку словників, який містить отримані дані, і подальшої
фільтрації за певними параметрами, такими як дата публікації статті, категорія
статті, кількість коментарів тощо.
Також можна використовувати різноманітні бібліотеки для обробки
тексту, наприклад, для визначення частоти вживання слів у заголовках статей
або для знаходження найбільш популярних тематик статей.
Крім того, можна використовувати бібліотеки для візуалізації даних,
наприклад, matplotlib або seaborn, щоб показати різноманітну статистику про
отримані дані у зручному графічному вигляді.

4.5. Візуалізація даних (наприклад, з використанням бібліотеки


matplotlib).

Після обробки та підготовки даних їх можна візуалізувати з


використанням бібліотеки matplotlib. Наприклад, якщо ми маємо список
словників, які містять дані про статті з новинного сайту, то можна побудувати
діаграму розподілу кількості статей за категоріями.
Нижче наведено приклад коду, який будує діаграму розподілу кількості
статей за категоріями з використанням бібліотеки matplotlib:

import matplotlib.pyplot as plt

# Підрахунок кількості статей за категоріями


categories = {}
for article in articles:
category = article['category']
if category in categories:
categories[category] += 1
else:
categories[category] = 1

# Побудова діаграми
plt.bar(categories.keys(), categories.values())
plt.title('Розподіл статей за категоріями')
plt.xlabel('Категорії')
plt.ylabel('Кількість статей')
plt.show()
У цьому коді ми створюємо словник categories, який містить категорії
статей та кількість статей у кожній категорії. Далі ми використовуємо метод
bar бібліотеки matplotlib для побудови діаграми з категоріями на вісі x та
кількістю статей на вісі y. Після цього ми додаємо заголовок, підписи вісей та
відображаємо діаграму за допомогою методу show.
Цей код є лише прикладом, і він може бути модифікований для
відображення будь-яких інших даних. Бібліотека matplotlib дозволяє
побудовувати різноманітні типи діаграм, графіків, гістограм та інших
візуалізацій даних.

Крім того, у лабораторній роботі можуть використовуватися додаткові


бібліотеки для роботи з даними, такі як pandas, numpy, re тощо.

Контрольні запитання
1. Що таке парсинг HTML-сторінок і для чого він використовується?
2. Які бібліотеки Python можуть бути використані для парсингу HTML-
сторінок?
3. Що таке об'єкт BeautifulSoup і як він пов'язаний з парсингом HTML-
сторінок?
4. Які функції бібліотеки BeautifulSoup можуть бути використані для
знаходження елементів HTML-сторінки?
5. Які методи можуть бути використані для отримання даних з елементів
HTML-сторінки?
6. Як можна зберегти отримані дані в структурованому вигляді?
7. Як можна візуалізувати отримані дані з використанням Python?

You might also like