πŸ’‘ Как Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· HTML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python

Π’ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ BeautifulSoup для извлСчСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· HTML.

from bs4 import BeautifulSoup

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ BeautifulSoup, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

pip install beautifulsoup4

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ BeautifulSoup для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ HTML-ΠΊΠΎΠ΄Π° ΠΈ извлСчСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ всС Ρ‚Π΅Π³ΠΈ <a> Π½Π° страницС:

import requests

# Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° HTML-ΠΊΠΎΠ΄Π°
response = requests.get("http://example.com")
html = response.text

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° BeautifulSoup
soup = BeautifulSoup(html, "html.parser")

# Поиск всСх Ρ‚Π΅Π³ΠΎΠ² <a>
links = soup.find_all("a")

# Π’Ρ‹Π²ΠΎΠ΄ ссылок
for link in links:
    print(link.get("href"))

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° requests для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ HTML-ΠΊΠΎΠ΄Π° с Π²Π΅Π±-страницы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ BeautifulSoup для поиска всСх Ρ‚Π΅Π³ΠΎΠ² <a> Π½Π° страницС ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° href.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· HTML Π² Python, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Beautiful Soup. Beautiful Soup – это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для парсинга HTML ΠΈ XML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², которая позволяСт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Π΅Π±-страниц. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Beautiful Soup, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ установки Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅:

        pip install beautifulsoup4
    
ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ установки, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ использованиС Beautiful Soup. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ содСрТимого Ρ‚Π΅Π³Π°

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ HTML ΠΊΠΎΠ΄:

        <html>
            <body>
                <h1>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠœΠΈΡ€!</h1>
                <p>Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ HTML ΠΊΠΎΠ΄Π°.</p>
                <a href="https://www.example.com">Бсылка</a>
            </body>
        </html>
    
ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Beautiful Soup, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС Ρ‚Π΅Π³Π° <h1>, <p> ΠΈ <a>. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

        from bs4 import BeautifulSoup
        
        html = '''
        <html>
            <body>
                <h1>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠœΠΈΡ€!</h1>
                <p>Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ HTML ΠΊΠΎΠ΄Π°.</p>
                <a href="https://www.example.com">Бсылка</a>
            </body>
        </html>
        '''
        
        soup = BeautifulSoup(html, 'html.parser')
        
        h1_tag = soup.find('h1')
        p_tag = soup.find('p')
        a_tag = soup.find('a')
        
        print(h1_tag.text)  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠœΠΈΡ€!'
        print(p_tag.text)  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ HTML ΠΊΠΎΠ΄Π°.'
        print(a_tag['href'])  # Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'https://www.example.com'
    
Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΡ€ΠΈ использовании BeautifulSoup ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС Π½ΡƒΠΆΠ½Ρ‹Ρ… Π½Π°ΠΌ Ρ‚Π΅Π³ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ всСх ссылок Π½Π° страницС

Если Π½Π° страницС Π΅ΡΡ‚ΡŒ нСсколько ссылок, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС ссылки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Beautiful Soup. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        from bs4 import BeautifulSoup
        
        html = '''
        <html>
            <body>
                <a href="https://www.example.com">Бсылка 1</a>
                <a href="https://www.google.com">Бсылка 2</a>
                <a href="https://www.python.org">Бсылка 3</a>
            </body>
        </html>
        '''
        
        soup = BeautifulSoup(html, 'html.parser')
        
        links = soup.find_all('a')
        
        for link in links:
            print(link['href'])
    
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ всС Ρ‚Π΅Π³ΠΈ <a> ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ 'href'. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ всС ссылки Π½Π° страницС.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Если Π½Π° страницС Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Beautiful Soup для извлСчСния этих Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

        from bs4 import BeautifulSoup
        
        html = '''
        <html>
            <body>
                <table>
                    <tr>
                        <th>Имя</th>
                        <th>Возраст</th>
                    </tr>
                    <tr>
                        <td>Анна</td>
                        <td>25</td>
                    </tr>
                    <tr>
                        <td>Иван</td>
                        <td>30</td>
                    </tr>
                </table>
            </body>
        </html>
        '''
        
        soup = BeautifulSoup(html, 'html.parser')
        
        rows = soup.find_all('tr')
        
        data = []
        
        for row in rows[1:]:
            name = row.find('td').text
            age = row.find('td').find_next('td').text
            
            data.append({'Name': name, 'Age': age})

        for person in data:
            print(person)
    
Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ всС Ρ‚Π΅Π³ΠΈ <tr>, Π° Π·Π°Ρ‚Π΅ΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния для ΠΈΠΌΠ΅Π½ΠΈ ΠΈ возраста. ΠœΡ‹ добавляСм эти значСния Π² список словарСй ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, использованиС Beautiful Soup Π² Python позволяСт Π½Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· HTML ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π²Π΅Π±-скрапингом ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π΅Π±-страниц. НадСюсь, эти ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Beautiful Soup для извлСчСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· HTML Π² Python.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠŸΠ°Ρ€ΡΠΈΠ½Π³ Π² Python Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚!

Python Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… β„–3. Π˜ΠΌΠΏΠΎΡ€Ρ‚ с Π²Π΅Π±-сайта (HTML)

ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ парсингу Π½Π° Python #6 | Как ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ с любого сайта | Requests BS4 Selenium

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ’‘ Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство Π² строку Π² Python? Π£Π·Π½Π°ΠΉΡ‚Π΅ простой способ

πŸ” Как Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ тСкст Π½Π° прСдлоТСния Π² Python? Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ инструмСнты

πŸ”₯Как вывСсти Π΄Π°Π½Π½Ρ‹Π΅ Π² Python: Π»Π΅Π³ΠΊΠΈΠΉ способ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ’‘ Как Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· HTML с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python

🐧 Debian: ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python 3.10 Π·Π° нСсколько простых шагов

πŸ”“ Как ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ» Π² ΠŸΠΈΡ‚ΠΎΠ½? Π›Π΅Π³ΠΊΠΈΠΉ способ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…!

πŸ” ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ прямо сСйчас