Python:
инструменты решения
типичных задач
sapronov.alexander92@gmail.com
@sapronovalex92
pynsk.nsk@gmail.com
vk.com/pynsk
facebook.com/PyNskCom
@py_nsk
Александр Сапронов:
В начале был... Гвидо!
В феврале 1991 года
опубликован код языка
2
Популярность сейчас
6 место
6 место
4 место
1 место
60k+ модулей на
pypi.python.org
3
➔Скриптинг приложений (Blender,
Inkscape)
➔Сетевые приложения (ABC bittorrent
client)
➔Для “склейки” компонентов
➔Web-проекты
➔Игры
➔Системные утилиты
➔GUI-программы
Где Python хорош?
4
Python не подходит для
Задач где:
- нужен максимально быстрый отклик
- требуется крайне низкое потребление
RAM
- надо быстро масштабировать решение
5
Типичные задачи
- Парсеры
- Генерация отчетов
- CMS, простые сайты
- SRM, CRM
- Моделирование (Наука)
- Обработка данных
- Утилиты c GUI
- Утилиты консольные
6
Парсинг
7
stdlib: HTMLParser (2), html.parser (3)
LXML, Beautiful Soup
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag)
def handle_endtag(self, tag):
print("Encountered an end tag :", tag)
def handle_data(self, data):
print("Encountered some data :", data)
parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
(2) - Python 2.*
(3) - Python 3.*
2. Парсим HTML/XML с помощью
1. Делаем запросы с помощью
urlib, requests
Парсинг по взрослому
grab - http://grablib.org/
scrapy - http://scrapy.org/
8
import scrapy
class BlogSpider(scrapy.Spider):
name = 'blogspider'
start_urls = ['http://blog.scrapinghub.com']
def parse(self, response):
for url in response.css('ul li a::attr("href")').re(r'.*/dddd/dd/$'):
yield scrapy.Request(response.urljoin(url), self.parse_titles)
def parse_titles(self, response):
for post_title in response.css('div.entries > ul > li
a::text').extract():
yield {'title': post_title}
$ scrapy runspider myspider.py
Генерация отчетов
9
Отчет
График PDF Excel
Генерация отчетов
10
Модуль для
создания
графики:
matplotlib
Генерация отчетов
11
PDF
- xhtml2pdf
- pdfkit
- PDFMiner
- PyPDF2
- reportlab
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
Генерация отчетов
12
Excel
- xlrd (read)
- xlwt (write)
- xlutils
- XlsxWriter
- openpyxl
import xlsxwriter
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', 20)
bold = workbook.add_format({'bold': True})
worksheet.write('A1', 'Hello')
worksheet.write('A2', 'World', bold)
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
worksheet.insert_image('B5', 'logo.png')
workbook.close()
Генерация отчетов
13
Отчет
График PDF Excel
- xhtml2pdf
- pdfkit
- PDFMiner
- PyPDF2
- reportlab
- matplotlib - xlrd (read)
- xlwt (write)
- xlutils
- XlsxWriter
- openpyxl
Web
- CRM
- SRM
- CMS
- Web-store
- Sites
14
Наука и обработка данных
15
Утилиты с GUI
16
Консольные утилиты
- argparse
- optparse
- Clint
- Click
- docopt
- Cli
- Plac
- Cliff
17
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
$ python hello.py --count=3
Your name: John
Hello John!
Hello John!
Hello John!
18
sapronov.alexander92@gmail.com
@sapronovalex92
pynsk.nsk@gmail.com
vk.com/pynsk
facebook.com/PyNskCom
@py_nsk
PyNSK контакты: Мои контакты:
ru.linkedin.com/in/alexsapronov
Питоны кончились…
Вопросы?

Python инструменты решения типичных задач