π« Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ BeautifulSoup Π² Python? Π Π°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ³ΠΎ ΡΡΠΏΠ° π«
BeautifulSoup Π² Python - ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ°ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· HTML ΠΈ XML ΡΠ°ΠΉΠ»ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡΡΡ BeautifulSoup Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅.
from bs4 import BeautifulSoup
# ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ BeautifulSoup Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° HTML-ΠΊΠΎΠ΄Π°
html = '''
<html>
<body>
<h1>ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ</h1>
<p>ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!</p>
</body>
</html>
'''
soup = BeautifulSoup(html, 'html.parser')
title = soup.find('h1').text
content = soup.find('p').text
print(title) # ΠΡΠ²ΠΎΠ΄ΠΈΡ: ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ
print(content) # ΠΡΠ²ΠΎΠ΄ΠΈΡ: ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, BeautifulSoup ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ HTML ΠΈ XML Π΄Π°Π½Π½ΡΠΌΠΈ Π² Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π½ΡΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ BeautifulSoup Π² Python?
BeautifulSoup - ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· HTML ΠΈ XML ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python. ΠΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π°Π½Π°Π»ΠΈΠ· HTML/XML Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ².
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° BeautifulSoup
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ BeautifulSoup Π² Python Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ pip. ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅:
pip install beautifulsoup4
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ BeautifulSoup
BeautifulSoup ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΎΠΉ HTML/XML:
-
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° BeautifulSoup: ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ Ρ BeautifulSoup, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ HTML/XML Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΡΠΈΠΌΠ΅Ρ:
from bs4 import BeautifulSoup html_doc = """
ΠΡΠΈΠΌΠ΅Ρ HTML Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΡΡΠ°Π½ΠΈΡΡ
ΠΡΠΎ Π°Π±Π·Π°Ρ ΡΠ΅ΠΊΡΡΠ°.
""" soup = BeautifulSoup(html_doc, 'html.parser') -
ΠΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²: ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ BeautifulSoup Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠ°Π·ΠΌΠ΅ΡΠΊΠ΅ HTML/XML. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ΅Π³Π° <p>, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ `find_all()`:
paragraphs = soup.find_all('p') for p in paragraphs: print(p.text)
-
ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
: BeautifulSoup ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° <h1>, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡ `.text`:
heading = soup.find('h1') print(heading.text)
-
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ: BeautifulSoup ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ HTML/XML, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `parent`, `next_sibling`, `previous_sibling` ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡΠΈΠΌΠ΅Ρ:
body = soup.find('body') print(body.parent.name)
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Ρ BeautifulSoup
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ BeautifulSoup. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ HTML ΡΡΡΠ°Π½ΠΈΡΠ°:
<html>
<head>
<title>ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ</title>
</head>
<body>
<h1>ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ</h1>
<p class="content">ΠΡΠΎ Π°Π±Π·Π°Ρ ΡΠ΅ΠΊΡΡΠ°.</p>
<ul id="list">
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 1</li>
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 2</li>
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 3</li>
</ul>
</body>
</html>
ΠΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ BeautifulSoup:
from bs4 import BeautifulSoup
html_doc = """
<html>
<head>
<title>ΠΡΠΈΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ</title>
</head>
<body>
<h1>ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ</h1>
<p class="content">ΠΡΠΎ Π°Π±Π·Π°Ρ ΡΠ΅ΠΊΡΡΠ°.</p>
<ul id="list">
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 1</li>
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 2</li>
<li>ΠΠ»Π΅ΠΌΠ΅Π½Ρ 3</li>
</ul>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
# ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° <h1>
heading = soup.find('h1')
print(heading.text)
# ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° <p class="content">
paragraph = soup.find('p', class_='content')
print(paragraph.text)
# ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° <ul>
ul = soup.find('ul', id='list')
lis = ul.find_all('li')
for li in lis:
print(li.text)