У світі веб-розробки часто доводиться мати справу з великим обсягом HTML-коду, який потрібно розібрати та обробити. У таких випадках важливо вміти ефективно використовувати інструменти, які дозволяють працювати з HTML-структурою без зайвих труднощів. Один із таких інструментів – це Beautifulsoup, популярна бібліотека для парсингу HTML та XML даних у Python.
У цій статті ми розглянемо практичний приклад використання Beautifulsoup для розбору HTML-списків та витягнення окремих елементів з вкладеними маркерами. Ми розглянемо вихідну задачу, зокрема, як очистити список від всіх маркерів та підмаркерів та отримати бажаний результат у вигляді списків з окремими елементами.
Згідно з поставленим завданням, у нас є HTML-документ з різними заголовками та списками, які містять маркери та підмаркери:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<h1>HEADER1</h1> <ul> <li>the virus killed 56</li> <li> Global press <a href="https://www.example.com">highlight</a> hundreds of dogs jumping <ul> <li> A Twitter user <a href="http://example.com/xad/status/sda">posts</a> photos of cats </li> </ul> </li> </ul> ... |
Мета – розібрати ці списки та отримати окремі елементи без маркерів та підмаркерів. Наприклад, для заголовка HEADER1 бажаний результат має виглядати так:
1 2 3 4 5 6 7 8 9 |
header1_posts = [ <li>the virus killed 56</li>, <li>Global press <a href="https://www.example.com">highlight</a> hundreds of dogs jumping</li>, <li>A Twitter user <a href="http://example.com/xad/status/sda">posts</a> photos of cats</li> ] |
Для досягнення цієї мети ми можемо використовувати Beautifulsoup разом з Python для парсингу HTML-коду та витягнення потрібних елементів. Перш за все, нам необхідно імпортувати бібліотеку та створити об’єкт Beautifulsoup з нашим HTML-кодом:
1 2 3 |
from bs4 import BeautifulSoup html_content = """тут наш HTML-код""" soup = BeautifulSoup(html_content, 'html.parser') |
Потім ми можемо знаходити всі теги <h1> та <ul>, які містять наші заголовки та списки:
1 2 |
headers = soup.find_all('h1') lists = soup.find_all('ul') |
Далі ми можемо обробити кожен список окремо та витягнути потрібні елементи без маркерів та підмаркерів:
1 2 3 4 |
for header, list_content in zip(headers, lists): header_text = header.text items = list_content.find_all('li') # Далі обробляємо кожен елемент та додаємо його до відповідного списку |
Після цього ми можемо зібрати всі отримані елементи в окремі списки для кожного заголовка:
1 2 3 |
header1_posts = [...] header2_posts = [...] header3_posts = [...] |
У результаті ми отримаємо окремі списки з елементами без маркерів та підмаркерів для кожного заголовка, як було запитано в поставленій задачі.
Таким чином, використання Beautifulsoup разом з Python дозволяє ефективно розбирати HTML-структури та витягувати потрібні дані для подальшої обробки.