HTML Diff
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 # Содержимое из &lt;div class="content"&gt; ... &lt;/div&gt; print soup.find('div', 'content') # Блок: &lt;div id="top_menu"&gt; ... &lt;/div&gt; print soup.find('div', id='top_menu')<p>Если хотим получить ссылки на изображения:</p>
19 # Содержимое из &lt;div class="content"&gt; ... &lt;/div&gt; print soup.find('div', 'content') # Блок: &lt;div id="top_menu"&gt; ... &lt;/div&gt; 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