BeautifullSoup. Парс сайти.

Основи Python и Django. -> Бібліотека beautifulsoup.

Бібліотека

Встановлення.

pip install bs4

приклад html документа

html_document = '''    
<html>
    <head>
        <title>Головна сторінка</title>
    </head>
    <body>
        <h1> Заголовок H1  </h1>
        <a href="http://google.com"> Посилання 1 </a>
        <a href="http://yandex.ru"> Посилання 2 </a>
        <div id="block_id">
            Блоковий елемент
        </div>
        <p class="p_class"> Параграф 1 </p>
        <p class="p_class"> Параграф 2 </p>
        <p class="p_class"> Параграф 3 </p>
        <table>
            <tr> 
                <td valign="top"> Комірка 1 </td>
                <td valign="top"> Комірка 1 </td>
                <td valign="top"> Комірка 3 </td>    
            </tr>
            <tr> 
                <td valign="top"> Комірка 1 </td>
                <td valign="top"> Комірка 1 </td>
                <td valign="top">Комірка 3 </td>    
            </tr>
        </table>
    </body>
</html>    
'''

Читання DOM.

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')

Заголовок документа.

soup.title.string

Заголовок документа.

el = soup.find('h1')

Заголовок документа.

soup.findAll('a')

Доступ до тексту та атрибутів тега.

link.get('href')
link.text

Прохід по масиву

for link in soup.findAll('a'):
    print(link.get('href'))

Пошук одного елемента по id.

el = soup.find('h1',{'id': 'my-header'})

Пошук багатьох елементів на ім’я класу.

els = soup.findAll('div',{'class': 'class_name'})

за кількома класами

show = soup.find('div', class_='action-link showPhonesLink')
show = soup.find('div', attrs={'class': 'action-link showPhonesLink'})

Пошук за css атрибутами.

els = soup.findAll('div',attrs={'id': '123'})

Метод select

results = soup.select('td[valign="top"]')
  • вповертає масив
Основи Python и Django. -> Домашнє завдання.

Домашнє завдання.

Зробити консольну програму, яка скопіює інформацію з сайту https://business.gov.kz/ru/directory-of-companies/ і збереже її в json файл з наступною структурою з розбивкою по сторінках: [ ‘1’: [ { ‘name’: ‘Вантажні шини в Казахстані|| EMI Company’, ‘url’: ‘https://www.napishem.kz/’ ‘phone’: ‘+3089765432’ }, { ‘name’: ‘IT-компания LIGASOFT’, ‘url’: ‘https://www.fgh.kz/’ ‘phone’: ‘+30895665432’ } … ] ‘2’: […] ]