0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Рано или поздно любой<strong>Python-программист</strong>сталкивается с задачей скопировать какой-нибудь материал с сайта. Так как страниц на нём достаточно много, терять время на ручное копирование - не самый лучший выход.</p>
1
<p>Рано или поздно любой<strong>Python-программист</strong>сталкивается с задачей скопировать какой-нибудь материал с сайта. Так как страниц на нём достаточно много, терять время на ручное копирование - не самый лучший выход.</p>
2
<p>К тому же, языки программирования затем и нужны, чтобы избавлять нас от рутинной работы, автоматизируя решение различных задач. Если же говорить о работе с<strong>HTML</strong>, то в Python есть отличные библиотеки для этого. Они позволяет парсить как сайты, так и обычные HTML-документы.</p>
2
<p>К тому же, языки программирования затем и нужны, чтобы избавлять нас от рутинной работы, автоматизируя решение различных задач. Если же говорить о работе с<strong>HTML</strong>, то в Python есть отличные библиотеки для этого. Они позволяет парсить как сайты, так и обычные HTML-документы.</p>
3
<h2>Парсер - что это вообще такое?</h2>
3
<h2>Парсер - что это вообще такое?</h2>
4
<p>Если вы ещё не сталкивались с этим понятием, то давайте поговорим о нём подробнее. Итак, парсером называют<strong>скрипт</strong>, который осуществляет синтаксический анализ данных с последующих их отбором и группировкой в БД либо электронную таблицу. Эта программа выполняет сопоставление линейной последовательности слов с учётом правил языка.</p>
4
<p>Если вы ещё не сталкивались с этим понятием, то давайте поговорим о нём подробнее. Итак, парсером называют<strong>скрипт</strong>, который осуществляет синтаксический анализ данных с последующих их отбором и группировкой в БД либо электронную таблицу. Эта программа выполняет сопоставление линейной последовательности слов с учётом правил языка.</p>
5
<p>Алгоритм работы парсера: 1. Получение доступа к сети и API веб-ресурса, его скачивание. 2. Извлечение, исследование и обработка скачанных данных. 3. Экспорт полученной информации.</p>
5
<p>Алгоритм работы парсера: 1. Получение доступа к сети и API веб-ресурса, его скачивание. 2. Извлечение, исследование и обработка скачанных данных. 3. Экспорт полученной информации.</p>
6
<p>По сути, парсинг может проводиться с применением разных языков программирования, но проще всего показать его именно на<strong>Python</strong>, благодаря простому синтаксису.</p>
6
<p>По сути, парсинг может проводиться с применением разных языков программирования, но проще всего показать его именно на<strong>Python</strong>, благодаря простому синтаксису.</p>
7
<p>Что касается назначения парсинга, то он используется в разных целях, например: - сбор информации для своего сайта; - индексация веб-страниц; - получение данных, не являющихся интеллектуальной собственностью и т. д.</p>
7
<p>Что касается назначения парсинга, то он используется в разных целях, например: - сбор информации для своего сайта; - индексация веб-страниц; - получение данных, не являющихся интеллектуальной собственностью и т. д.</p>
8
<p>Но чтобы парсер полноценно выполнил поставленные задачи, нужно подготовить среду, о чём и поговорим.</p>
8
<p>Но чтобы парсер полноценно выполнил поставленные задачи, нужно подготовить среду, о чём и поговорим.</p>
9
<h2>Готовим к работе скрипт парсинга на Python</h2>
9
<h2>Готовим к работе скрипт парсинга на Python</h2>
10
<p>Подготовка включает в себя 2 этапа: сначала мы должны освежить свои знания в некоторых областях, а потом можно приступить и к подготовке библиотек.</p>
10
<p>Подготовка включает в себя 2 этапа: сначала мы должны освежить свои знания в некоторых областях, а потом можно приступить и к подготовке библиотек.</p>
11
<p>Итак, для успешного парсинга вам потребуются: 1. Знание PHP, HTML, CSS, JavaScript. Они нужны для первичного анализа и понимания кода страницы, с которой и будем осуществлять парсинг. Не стоит думать, что всё так просто, ведь порой и опытный специалист не может разобраться в структуре сайта, написанного на HTML. 2. Знание и понимание, как применять библиотеки HTML-парсинга на Python, а также регулярные выражения. Это поможет разобраться с проблемами, связанными с невалидным кодом. 3. Основы объектно-ориентированного программирования (желательно). 4. Знания баз данных, например, MySQL. Это необходимо для обработки выходных данных.</p>
11
<p>Итак, для успешного парсинга вам потребуются: 1. Знание PHP, HTML, CSS, JavaScript. Они нужны для первичного анализа и понимания кода страницы, с которой и будем осуществлять парсинг. Не стоит думать, что всё так просто, ведь порой и опытный специалист не может разобраться в структуре сайта, написанного на HTML. 2. Знание и понимание, как применять библиотеки HTML-парсинга на Python, а также регулярные выражения. Это поможет разобраться с проблемами, связанными с невалидным кодом. 3. Основы объектно-ориентированного программирования (желательно). 4. Знания баз данных, например, MySQL. Это необходимо для обработки выходных данных.</p>
12
<p>Вышеперечисленное - базис, владея которым<strong>HTML-парсинг</strong>не вызовет у вас затруднений. Также было бы неплохо уметь работать с иерархическими структурами, XML и JSON.</p>
12
<p>Вышеперечисленное - базис, владея которым<strong>HTML-парсинг</strong>не вызовет у вас затруднений. Также было бы неплохо уметь работать с иерархическими структурами, XML и JSON.</p>
13
<p>Переходим ко второй части - библиотекам. Вот основные: - LXML. Пакет, имеющий поддержку XLST и XPath. Отличается богатым функционалом по обработке разных API; - GRAB. Очень распространённый инструмент, работает с DOM, может выполнять автозаполнение форм, обрабатывать перенаправление с сайтов; - Beautiful Soup. Прекрасно справляется со структурным разбором сайта, а также с обработкой невалидного кода HTML.</p>
13
<p>Переходим ко второй части - библиотекам. Вот основные: - LXML. Пакет, имеющий поддержку XLST и XPath. Отличается богатым функционалом по обработке разных API; - GRAB. Очень распространённый инструмент, работает с DOM, может выполнять автозаполнение форм, обрабатывать перенаправление с сайтов; - Beautiful Soup. Прекрасно справляется со структурным разбором сайта, а также с обработкой невалидного кода HTML.</p>
14
<h2>Устанавливаем библиотеку Beautiful Soup (Linux)</h2>
14
<h2>Устанавливаем библиотеку Beautiful Soup (Linux)</h2>
15
<p>Прекрасным преимуществом этой библиотеки является наличие персонального алгоритма структурирования HTML-кода. А это уже позволяет сэкономить разработчику время, что не может не радовать. Итак, устанавливаем:</p>
15
<p>Прекрасным преимуществом этой библиотеки является наличие персонального алгоритма структурирования HTML-кода. А это уже позволяет сэкономить разработчику время, что не может не радовать. Итак, устанавливаем:</p>
16
$ apt-get install python-bs4 $ apt-get install python-lxml $ apt-get install python-html5lib<p>Установив нужные модули, можем<strong>парсить сайт</strong>. В результате мы получим его структурированный код:</p>
16
$ apt-get install python-bs4 $ apt-get install python-lxml $ apt-get install python-html5lib<p>Установив нужные модули, можем<strong>парсить сайт</strong>. В результате мы получим его структурированный код:</p>
17
# -*- coding: utf-8 -*- from bs4 import BeautifulSoup from urllib2 import urlopen html_doc = urlopen('http://otus.ru').read() soup = BeautifulSoup(html_doc) print soup<p>Чтобы выполнить поиск по ссылкам:</p>
17
# -*- coding: utf-8 -*- from bs4 import BeautifulSoup from urllib2 import urlopen html_doc = urlopen('http://otus.ru').read() soup = BeautifulSoup(html_doc) print soup<p>Чтобы выполнить поиск по ссылкам:</p>
18
for link in soup.find_all('a'): print link.get('href') # Содержимое ссылок for link in soup.find_all('a'): print link.contents[0]<p>А вот так работает парсер DIV-блоков:</p>
18
for link in soup.find_all('a'): print link.get('href') # Содержимое ссылок for link in soup.find_all('a'): print link.contents[0]<p>А вот так работает парсер DIV-блоков:</p>
19
# Содержимое из <div class="content"> ... </div> print soup.find('div', 'content') # Блок: <div id="top_menu"> ... </div> print soup.find('div', id='top_menu')<p>Если хотим получить ссылки на изображения:</p>
19
# Содержимое из <div class="content"> ... </div> print soup.find('div', 'content') # Блок: <div id="top_menu"> ... </div> print soup.find('div', id='top_menu')<p>Если хотим получить ссылки на изображения:</p>
20
for img in soup.find_all('img'): print img.get('src')<p><em>Как видим, ничего сложного нет. Но если хотите узнать больше, вы всегда можете записаться на курс "<a>Разработчик Python</a>" в OTUS!</em></p>
20
for img in soup.find_all('img'): print img.get('src')<p><em>Как видим, ничего сложного нет. Но если хотите узнать больше, вы всегда можете записаться на курс "<a>Разработчик Python</a>" в OTUS!</em></p>
21
21