Читаем Введение в Python полностью

13 | print ("Я выполняюсь в любом случае!")

Таким образом, используя обработку исключительных ситуаций, вы можете защитить программу от взлома, непредвиденного поведения и в будущем получить детальную информацию по логическим ошибкам, содержащимся в ней.

<p>HTML парсер на Python</p>

Published: 08 April 2015

Учитывая современное развитие Интернета, было бы кощунством не написать приложение, взаимодействующее со всемирной паутиной. Сегодня мы напишем простенький html-парсер на Python. Наше приложение будет читать код указанной страницы сайта и сохранять все ссылки в ней в отдельный файл. Это приложение может помочь SEO-аналитикам и веб-разработчикам.

Писать будем на Python 3, в котором есть встроенный класс для html-парсера из модуля html.parser

| from html.parser import HTMLParser

Так же нам понадобится функция urlopen из модуля urllib

| from urllib.request import urlopen

Именно функция urlopen будет получать исходный код указанной странички.

Перегрузка класса HTMLParser

Наша задача таким образом перегрузить функционал существующего класса HTMLParser, чтобы он соответствовал нашей задаче.

| class MyHTMLParser(HTMLParser):

| def __init__(self, site_name, * args, * * kwargs):

| # список ссылок

| self.links = []

| # имя сайта

| self.site_name = site_name

| # вызываем __init__ родителя

| super().__init__( * args, * * kwargs)

| # при инициализации "скармливаем" парсеру содержимое страницы

| self.feed(self.read_site_content())

| # записываем список ссылок в файл

self.write_to_file()

Базовый класс HTMLParser имеет несколько методов, нас в данном случае интересуют метод handle_start_tag. Этот метод вызывается каждый раз, когда наш парсер встречает в тексте октрывающий html-тэг.

| def handle_starttag(self, tag, attrs):

| # проверяем является ли тэг тэгом ссылки

| if tag == 'a':

| # находим аттрибут адреса ссылки

| for attr in attrs:

| if attr[0] = = 'href':

| # проверяем эту ссылку методом validate() (мы его еще напишем)

| if not self.validate(attr[0]):

| # вставляем адрес в список ссылок

self.links.append(attr[1])

Напишем вспомогательный метод validate:

| def validate(self, link):

| """ Функция проверяет стоит ли добавлять ссылку в список адресов.

| В список адресов стоит добавлять если ссылка:

| 1) Еще не в списке ссылок

| 2) Не вызывает javascript-код

| 3) Не ведет к какой-либо метке. (Не содержит #)

| """

return link in self.links or'#'inlink or'javascript:' inlink

Создадим метод, который будет открывать указанную страницу и выдавать ее содержимое.

def read_site_content(self):

return str(urlopen(self.site_name).read())

Осталось добавить возможность записи списка ссылок на диск в читабельном формате:

| def write_to_file(self):

| # открываем файл

| f =open('links.txt', 'w')

| # записываем отсортированный список ссылок, каждая с новой строки

| f.write('\n'.join(sorted(self.links)))

| # закрываем файл

f.close()

Все готово, можем запускать парсер.

| parser = MyHTMLParser("http://python.org")

После того как вы запустите данный скрипт в директории, где находится ваш файл появится текстовый документ links.txt, содержащий ссылки.

Конечно, данный пример достаточно примитивен, но на его основе вы можете попробовать написать, к примеру, веб-crawler, который будет анализировать весь сайт целиком, а не одну его страницу.

<p>Примитивный Paint на Python</p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных