Введение в Python - [15]
>| 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, который будет анализировать весь сайт целиком, а не одну его страницу.
Примитивный Paint на Python
В данной статье мы напишем простенькую рисовалку на Python. На этом примере мы потренируемся в создании GUI, использовании макетов компоновки в tkinter, передаче дополнительных аргументов в функцию-обработчик нажатия кнопки и использовании lambda-функции в Python.
Для этого примера удобнее будет использовать классовый подход к созданию GUI. Для начала определим класс Paint:
>| from tkinter import *
>| class Paint(Frame):
>| def __init__(self, parent):
>| Frame.__init__(self, parent)
>| self.parent = parent
>| def main():
>| root = Tk()
>| root.geometry("1920x1080+300+300")
>| app = Paint(root)
>| root.mainloop()
>| if __name__ == "__main__":
>| main()
Запустив этот код вы должны получить простенькое окно, с которым мы будем работать дальше.
Теперь напишем для класса Paint метод setUI, в котором будет задаваться расположение всех кнопок, меток и самого поля для рисования. У нас будет два ряда кнопок, первый ряд с кнопками устанавливающими цвет, второй ряд устанавливает размер кисти для рисования. Под ними будет идти поле для рисования.
Это достаточно объемный метод, однако многие строки повторяются, так что наберитесь терпения:
>| def setUI(self):
>| self.parent.title("Pythonicway PyPaint") # Устанавливаем название окна
>| self.pack(fill=BOTH, expand=1) # Размещаем активные элементы на родительском окне
>|
>| self.columnconfigure(6, weight=1)
>| self.rowconfigure(2, weight=1) # То же самое для третьего ряда
>
>| self.canv = Canvas(self, bg="white") # Создаем поле для рисования, устанавливаем белый фон
>| self.canv.grid(row=2, column=0, columnspan=7,
>| padx=5, pady=5, sticky=E+W+S+N)
>| color_lab = Label(self, text="Color: ") # Создаем метку для кнопок изменения цвета кисти
>| color_lab.grid(row=0, column=0, padx=6)
>
>| red_btn = Button(self, text="Red", width=10)
>| red_btn.grid(row=0, column=1) # Устанавливаем кнопку первый ряд, вторая колонка
>|
>| # Создание остальных кнопок повторяет ту же логику, что и создание
>| # кнопки установки красного цвета, отличаются лишь аргументы.
>|
>| green_btn = Button(self, text="Green", width=10)
>| green_btn.grid(row=0, column=2)
>
>| blue_btn = Button(self, text="Blue", width=10)
>| blue_btn.grid(row=0, column=3)
>|
>| black_btn = Button(self, text="Black", width=10)
>| black_btn.grid(row=0, column=4)
>|
>| white_btn = Button(self, text="White", width=10)
>| white_btn.grid(row=0, column=5)
>| size_lab = Label(self, text="Brush size: ") # Создаем метку для кнопок изменения размера кисти
>| size_lab.grid(row=1, column=0, padx=5)
>| one_btn = Button(self, text="Two", width=10)
>| one_btn.grid(row=1, column=1)
>|
>| two_btn = Button(self, text="Five", width=10)
>| two_btn.grid(row=1, column=2)
>
>| five_btn = Button(self, text="Seven", width=10)
>| five_btn.grid(row=1, column=3)
>|
>| seven_btn = Button(self, text="Ten", width=10)
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)
Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Система сборки программ, используемая во FreeBSD, имеет значительно большие возможности, чем те, которые мы задействовали. Какие это возможности и как их использовать в своих портах?
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.