BeautifullSoup. Парсим сайты.
Basics of Python and Django. -> Библиотека beautifulsoup.
Библиотека BeatifulSoup.
Установка.
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"]')
- возвращает массив
Basics of Python and 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': [...]
]